我需要编写自己的条件变量实现,就像 pthread_cond_t 一样。
我知道我需要使用编译器提供的原语,如 __sync_val_compare_and_swap 等。
有谁知道我会怎么做。
谢谢
最佳答案
条件变量的正确实现困难。改用许多库之一(例如 boost、pthreads-win32、我的 just::thread 库)
你需要:
- 保留一个等待线程的列表(这可能是一个“虚拟”列表而不是实际的数据结构)
- 确保当线程等待时,您自动解锁等待线程拥有的互斥锁,并在该线程进入阻塞操作系统调用之前将其添加到列表中
- 确保当通知条件变量时,唤醒当时正在等待的线程之一,而不是稍后等待的线程
- 确保在广播条件变量时唤醒当时正在等待的所有线程,而不是任何稍后等待的线程。
- 加上其他暂时想不起来的问题。
细节因操作系统而异,因为您依赖于操作系统阻塞/唤醒原语。
关于c++ - 如何使用原子原语编写自己的条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710017/