linux boost多线程特性 线程挂起与唤醒
对于boost线程库,提供了线程根据条件进行挂起唤醒的功能。之前看过使用linux标准线程库做过的一些实验,想知道boost线程库的特性是否也一样。
linux线程的唤醒机制与windows的不同。
在windows下如果执行了线程唤醒操作,该唤醒操作会等待第一个挂起的线程,当系统中有线程挂起的时候,就对其进行唤醒。其生存周期一直到其执行完一次唤醒任务结束。
在linux下,如果执行唤醒操作,该唤醒操作会立刻执行,如果系统中没有挂起的线程,那么该操作就会立刻执行结束,如果有线程在操作执行结束后挂起,则
不会被唤醒。唤醒操作的生存周期是,执行操作的瞬间,有线程挂起就唤醒,没有操作结束。不像windows那样,等待第一个需要的唤醒操作到达。
经过测试,boost线程库在linux上的唤醒操作也遵从上面的特性。测试代码如下:
测试环境:centos ubuntu
boost版本: 1.41.0
#include <stdlib.h>
#include<iostream>
#include<boost/thread/condition.hpp>
#include<boost/thread/locks.hpp>
#include<boost/thread/mutex.hpp>
#include <boost/thread/detail/thread.hpp>
#include <boost/thread/thread_time.hpp>
#include <iostream>
using namespace boost::posix_time;
using namespace std;
boost::mutex token;
boost::condition_variable num_cond;
int thread_amount = 0;
void ThreadOne()
{
boost::mutex::scoped_lock tokenlock( token );
cout << "thread one wait" << endl;
num_cond.wait( tokenlock );
cout << "thread one work" << endl;;
}
void ThreadTwo()
{
boost::mutex::scoped_lock tokenlock( token );
cout << "thread two wait" << endl;
num_cond.wait( tokenlock );
cout << "thread two work" << endl;
}
void Awoke()
{
boost::mutex::scoped_lock tokenlock( token );
cout << "awake now" << endl;
num_cond.notify_one( );
}
/*
*
*/
int main(int argc, char** argv)
{
boost::thread aw(&Awoke);
sleep(1);
boost::thread w(&ThreadOne);
boost::thread
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
Linux如何查找动态库
http://blog.chinaunix.net/u2/60011/showart_1007920.html
1. 静态库和动态库的基本概念
静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。
动 ......
原文地址:http://i.yoho.cn/logview/11756.html
在网上查找了配置linux配置IP的方法,简单的有下面两种:
最常用的给网卡配置ip的命令为
#ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
说明:
eth0是第一个网卡,其他依次为eth1,eth*
192.168.0.1是给网卡配置的第一个网卡配置的 ......
最开始时,ram芯片中包含的是随机数据。当开始启动时,cpu的一个引脚上会产生一个reset逻辑值。此后处理器的一些寄存器设置成固定的数值,并执行在物理地址0xfffffff0处找到的代码。硬件把这个地址映射到某个只读、持久的存储芯片中,该芯片通常称为rom(read-only memory只读内存)。rom所存放的程序集在80x86体系中通常叫做 ......
系统收到邮件都会保存在“/var/spool/mail/[linux用户名]”文件中。
在linux中输入mail,就进行了收件箱,并显示二十封邮件列表。
此时命令提示符为"&"
unread 标记为未读邮件
h|headers 显示当前的邮件列表
l|list 显示当前支持的命令列表
?|help 显示多个查看邮件列表的命令参数用法
d 删除当前邮件 ......