gpt4 book ai didi

c++ - pthread_cond_wait 和 pthread_mutex_unlock 是否冲突?

转载 作者:太空狗 更新时间:2023-10-29 20:00:31 24 4
gpt4 key购买 nike

我在 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)

谢谢。

最佳答案

The standard说:

Upon successful return, the mutex has been locked and is owned by the calling thread.

这意味着当返回时,pthread_cond_wait 自动 锁定关联的互斥体。

工作流程是这样的:

  • 你锁定了一个互斥体
    • pthread_cond_wait 原子地阻塞和解锁互斥锁(这样其他线程可能会到达这里)
    • 当条件到达时,pthread_cond_wait 自动返回并锁定互斥体
  • 你解锁了互斥体

I don't think pthread_cond_wait blocks and unlocks

那是因为你没有阅读我提供的链接。

These functions atomically release mutex and cause the calling thread to block on the condition variable cond;

关于c++ - pthread_cond_wait 和 pthread_mutex_unlock 是否冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6532767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com