条件变量 如果线程之间执行顺序上有依赖关系,可使用条件变量(Condition variables)。 可以到boost官网中参考条件变量(Condition variables)的使用。 条件变量必须和互斥量配合使用,等待另一个线程重某个事件的发生(满足某个条件),然后线程才能继续执行。共有两种条 ...
分类:
编程语言 时间:
2017-05-03 14:29:01
阅读次数:
205
在整理Java LockSupport.park()的东东。看到了个"Spurious wakeup"。又一次梳理下。 首先来个《UNIX环境高级编程》里的样例: [cpp] view plaincopy #include <pthread.h> struct msg { struct msg *m ...
分类:
其他好文 时间:
2017-04-29 11:00:00
阅读次数:
302
1. 背景 多线程中经常需要使用到锁(pthread_mutex_t)来完成多个线程之间的互斥操作。 但是互斥锁有一个明显到缺点: 只有两种状态,锁定和非锁定。 而条件变量则通过允许线程阻塞并等待另一个线程发送唤醒信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。 2. 条件变量到主要函数 2.1 ...
分类:
编程语言 时间:
2017-04-21 09:11:52
阅读次数:
244
进程间通信: # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量( semophore ...
分类:
编程语言 时间:
2017-04-08 01:01:20
阅读次数:
256
1.1.1. 条件变量应用之等待通知 条件变量Condition提供了一种基于ReentrantLock的事件等待和通知的机制,并且可以监控任意指定的条件,在条件不满足时等待条件满足,其它线程在条件满足时可以通知等待条件的线程,从而唤醒等待中的线程。 下面的代码实现了两件工作分别由两个线程轮流不断执 ...
分类:
编程语言 时间:
2017-03-24 23:26:39
阅读次数:
393
Condition Condition接口描述了可能会与锁有关联的条件变量。这些变量在用法与使用Object.wait访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个Lock可能与多个Condition对象关联。为了避免兼容性问题,Condition方法的名称与对应的Object版 ...
分类:
编程语言 时间:
2017-02-19 10:41:03
阅读次数:
235
5. 线程的互斥和同步 5.1 同步和互斥的概念 (1)线程同步:是一个宏观概念,在微观上包含线程的相互排斥和线程的先后执行的约束问题。解决同步方式一般采用条件变量和信号量。 (2)线程互斥:线程执行的相互排斥(注意,它不关心线程间执行的先后顺序!)。解决互斥一般使用互斥锁、读写锁和信号量。 【编程 ...
分类:
编程语言 时间:
2017-02-19 00:09:30
阅读次数:
228
线程 类std::thread代表一个可执行线程,使用时必须包含头文件<thread>。std::thread可以和普通函数,匿名函数和仿函数(一个实现了operator()函数的类)一同使用。另外,它允许向线程函数传递任意数量的参数。 上例中,t 是一个线程对象,函数func()运行于该线程中。对 ...
分类:
编程语言 时间:
2017-02-14 13:48:55
阅读次数:
157
最近在看pthread方面的书,看到条件变量一节的时候,回忆了下java中条件变量的使用方式。 java中条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对象上调用newCondition()方法来获取的,这样,条件就和 ...
分类:
编程语言 时间:
2017-02-11 18:06:23
阅读次数:
197
转载: http://my.oschina.net/sundq/blog/203600 Linux上目前有两种事件通知方式,一种是线程条件变量,一种是利用eventfd实现事件通知,下面介绍一下利用这两种方法实现异步队列的方法。 线程条件变量 相关函数介绍 pthread_cond_init:初始化 ...
分类:
系统相关 时间:
2017-01-22 12:07:05
阅读次数:
272