例如:
pthread_mutex_lock();
//Do something
sleep(1); //causes issues waiting while holding lock
pthread_mutex_unlock();
如果我们不想在互斥锁内部使用睡眠,怎么办?
答案 0 :(得分:5)
根据经验,您通常(但不总是)不想长时间持有互斥锁(否则,锁定同一互斥锁的其他线程将等待太长时间),而整整一秒钟是处理器每秒执行数十亿次基本操作的时间很长。
您可能要使用condition variables(因为pthread_cond_wait是atomically释放互斥锁),或使用sleep
(或某些poll(2) ... )在锁定区域之外。您甚至可能在Linux上使用pipe(7)-s-或更便宜但特定于Linux的eventfd(2)-在运行事件循环的线程之间进行通信。
coverity static source analyzer是启发式的,可能会发出错误的警报。
花时间阅读优质的Pthread tutorial。