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
相关文档:
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
每一个Linux发行版都有自己专门的工具去构建自定义的内核. 本文主要介绍在Ubuntu平台上编译内核, 如何从www.kernel.org(也叫vanilla kernel)获得最新且未改动的内核源代码来构建一个自定义的内核, 这样你可以使用自己的内核而不是发行版的内核, 另外也介绍了如何给内核打补丁, 从而方便增加新的功能.
下面的工作我都在Ub ......
安装好arch linux 不论是2月的还是8月的,再更新完成以后重启,都是到acpi 启动处黑屏。
官方解释:内核拒绝启动,并显示类似 “had IRQ”探测失败,had中断丢失 的错误信息。在2.6.x内核中,某些硬盘控制器会出现类似信息,一般在启动时给内核传递"acpi = off"参数就可以解决这个问题。
nano /boot/grub/menu. ......
原文地址: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是给网卡配置的第一个网卡配置的 ......