例如:
pthread_mutex_lock();
//Do something
sleep(1); //causes issues waiting while holding lock
pthread_mutex_unlock();
如果我们不想在互斥锁内部使用睡眠,怎么办?
最佳答案
根据经验,您通常(但不总是)不想长时间持有互斥锁(否则,锁定同一互斥锁的其他线程将等待太长时间),而整整一秒钟是很长一段时间每秒执行数十亿次基本操作的处理器。
您可能要使用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/