1

实现中存在竞争条件,可能会丢失信号。问题是 pthread_cond_wait 函数不是原子的?在文件 https://github.com/android/platform_bionic/blob/master/libc/bionic/pthread.c的评论中讨论了相同的内容

这个操作不应该是原子的吗?

4

1 回答 1

1

应该担心这种“竞争条件”。根据评论,只有当一个线程在一个病态的地方进入睡眠状态,在那里长时间睡眠,而其他线程向条件变量发出病态的次数(不多也不少)时,才会发生这种情况。

这实际上是条件变量的许多完全合理的低级实现所固有的,尤其是在基于futexes时。基本上,在用户空间代码原子地检查整数变量的值之后,它调用内核执行阻塞操作,但如果整数变量的值在此期间发生变化,它会指示内核中止操作。病态的情况是整数变量在其范围内一直环绕精确整数次(而第一个调用者一直处于阻塞状态!)。

如果您想了解更多关于此类真正微妙细节的信息,请阅读本文

于 2012-05-14T18:26:56.623 回答