例如:
pthread_mutex_lock();
//Do something
sleep(1); //causes issues waiting while holding lock
pthread_mutex_unlock();
如果我们不想在互斥锁内使用 sleep ,解决方案是什么
最佳答案
根据经验,您通常(但并非总是)不希望长时间持有互斥体(否则,锁定同一互斥体的其他线程会等待太长时间),并且一整秒是对于处理器每秒执行数十亿次基本运算来说,这是一个很长的周期。
您可能想使用condition variables (因为pthread_cond_wait是atomically释放互斥体),或者在锁定区域之外进行 sleep
(或某些poll(2) ...)。您甚至可以在 Linux 上使用 pipe(7) -s - 或更便宜但特定于 Linux eventfd(2) - 在运行事件循环的线程之间进行通信。
coverity static source analyzer是启发式的,可能会发出错误警报。
花时间读一本好书Pthread tutorial .
关于c - 在互斥锁内调用 sleep() 有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929198/