【发布时间】:2010-09-09 09:42:30
【问题描述】:
使用pthread_cond_wait 或使用信号量的优缺点是什么?
我正在等待这样的状态变化:
pthread_mutex_lock(&cam->video_lock);
while(cam->status == WAIT_DISPLAY) {
pthread_cond_wait(&cam->video_cond, &cam->video_lock);
}
pthread_mutex_unlock(&cam->video_lock);
使用正确初始化的信号量,我想我可以这样做:
while(cam->status == WAIT_DISPLAY) {
sem_wait(&some_semaphore);
}
每种方法的优缺点是什么?
【问题讨论】:
-
我刚刚意识到“正确初始化的信号量”定义不明确。信号量是设置为 1 还是设置为 0?我会说它应该设置为 0。那么,信号量是否保护 cam->status?
-
在第二个 sn-p 中,如其他答案所述,您的线程将在互斥锁未释放时被阻止。所以你的
sem_wait方法永远不会返回,因为没有其他线程可以获取互斥锁并调用sem_signal。但是,如果我在sem_wait之前释放 mutex 并在等待后再次要求它,我不会怎么办。我知道这些步骤不是原子的,那么会发生什么?
标签: c multithreading semaphore