在互斥锁内调用sleep()的缺点是什么?

时间:2018-08-20 10:54:41

标签: c multithreading mutex thread-synchronization coverity

例如:

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

pthread_mutex_unlock();

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

1 个答案:

答案 0 :(得分:5)

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

您可能要使用condition variables(因为pthread_cond_waitatomically释放互斥锁),或使用sleep(或某些poll(2) ... )在锁定区域之外。您甚至可能在Linux上使用pipe(7)-s-或更便宜但特定于Linux的eventfd(2)-在运行事件循环的线程之间进行通信。

coverity static source analyzer是启发式的,可能会发出错误的警报。

花时间阅读优质的Pthread tutorial