例如:

pthread_mutex_lock();
//Do something
sleep(1);                //causes issues waiting while holding lock

pthread_mutex_unlock();


如果我们不想在互斥锁内部使用睡眠,怎么办?

最佳答案

根据经验,您通常(但不总是)不想长时间持有互斥锁(否则,锁定同一互斥锁的其他线程将等待太长时间),而整整一秒钟是很长一段时间每秒执行数十亿次基本操作的处理器。

您可能要使用condition variables(因为pthread_cond_waitatomically释放互斥锁),或在锁定区域之外使用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/

10-11 22:53
查看更多