【发布时间】:2015-03-27 07:19:35
【问题描述】:
假设有一个线程调用pthread_cond_wait 并等待信号:
pthread_mutex_lock(&m);
.....
while(run)
{
do {
pthread_cond_wait(&cond,&m);
} while(!got_signal);
got_signal = false;
do_something();
}
并且有多个线程应该传递信号:
pthread_mutex_lock(&m);
got_signal = true;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&m);
这个解决方案足够安全吗?如果多个线程发送信号会发生什么? mmutex 是否足以保证所有信号都被序列化并且不会丢失?
【问题讨论】:
-
你的循环坏了,调用
pthread_cond_wait,即使got_signal已经是真的了。另外,你的问题没有意义。 “所有信号”是什么意思?听起来您对条件变量的工作方式有一些相当大的误解。条件变量是无状态的——如果你有可以有状态的信号,你的代码必须实现那个状态。
标签: c multithreading pthreads posix