【发布时间】:2011-09-25 20:12:00
【问题描述】:
我在 Linux 中使用 pthread 实现手动重置事件,这类似于 Windows 中的 WaitForSingleEvent。我找到了这篇文章
pthread-like windows manual-reset event
并遵循它,但是有一件事情让我感到困惑:
void mrevent_wait(struct mrevent *ev) {
pthread_mutex_lock(&ev->mutex);
while (!ev->triggered)
pthread_cond_wait(&ev->cond, &ev->mutex);
pthread_mutex_unlock(&ev->mutex);
}
- pthread_cond_wait: 原子地释放互斥锁并导致调用线程阻塞在条件变量 cond 上;
- pthread_mutex_unlock: 尝试解锁指定的互斥锁。如果互斥锁类型为 PTHREAD_MUTEX_NORMAL,则不提供错误检测。如果线程尝试解锁未锁定的互斥锁或解锁的互斥锁,则会导致未定义的行为。
我害怕的是当 pthread_cond_wait 释放互斥锁时,然后 pthread_mutex_unlock 可能会出现未定义的行为(这种事情会让我发疯,他们怎么不处理它:-D)
谢谢。
【问题讨论】:
标签: c++ multithreading pthreads