代码如下:环境是:Linux skeeter-desktop 2.6.27-14-generic #1 SMP Wed Apr 15 18:59:16 UTC 2009 i686 GNU/Linux
[code]
#include
by wwdwwd - C/C++ - 2009-06-14 20:51:33 阅读(2718) 回复(4)
在网上看关于线程间同步时候对条件变量和互斥锁的描述: 互斥锁一个明显的缺点是他只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,他常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其他的某个线程改变了条件变量,他将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些...
我的问题是这样的,当一个进程写数据到共享内存时遥通知另一个进程去读数据; 我利用互斥锁和条件变量通过共享内存实现进程同步时, 发现当一个进程正在等待条件变量时将该进程kill了后,似乎互斥锁还是被该进程独占了 其它所有的进程包都要好像始终在等待该互斥锁,请问有没有更好的解决方法?我想 用信号量去处理,但是不知道信号量是否也会出现类似的问题?
我在网上搜索到的多线程编程中,当讲到 条件变量时,都有这么一句话“它常和互斥锁一起使用”,或者是“通常它和互斥锁一起使用”(但他们举的例子全都是一起使用的,没单独使用过)。是不是说 条件变量 可以不用互斥锁而单独使用呢?如果单独使用条件变量时,会有资源竞争问题吗?
工作中的代码都是用线程线程互斥量,条件变量进行线程间交互。 一直想用信号。 好像信号(不是信号量)是针对进程而不是针对线程的?有没有针对线程的信号? 进行线程间通信,线程信号(不是信号量)和线程互斥量,条件变量,各自的优缺点是?
我的程序大致如下(环形缓冲区抓包): packetCirbuf是结构体,包含mp互斥量和more条件变量 线程A: write() { while(1){ mutex_lock(&packetCirbuf.mp); DoWrite();//每次写一个包 cond_signal(&packetCirbuf.more); mutex_unlock(&packetCirbuf.mp); } } 线程B Read() { while(1){ mutex_lock(&packetCirbuf.mp); cond_wait(&packetCirbuf.more,&packetCirbuf.mp); DoRead();//每次读一个包...
我在运行《深入理解计算机系统》这本书“并发编程”这一章中的一个互斥锁的例子时,结果不对,请大牛给分析一下。
[code]
#include
#include
很多资料建议用析构函数释放互斥锁 { //新代码段 Lock lock; ... ... } 这样有异常抛出时,锁也能自动释放 但是当没有异常发生,程序正常执行时,所有的编译器是否能保证这个代码段结束时析构函 数马上调用呢?