c - 在互斥锁内调用 sleep() 有什么缺点?

标签 c multithreading mutex thread-synchronization coverity

例如:

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

pthread_mutex_unlock();

如果我们不想在互斥锁内使用 sleep ,解决方案是什么

最佳答案

根据经验,您通常(但并非总是)不希望长时间持有互斥体(否则,锁定同一互斥体的其他线程会等待太长时间),并且一整秒是对于处理器每秒执行数十亿次基本运算来说,这是一个很长的周期。

您可能想使用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/

相关文章:

c - 读取错误设备驱动程序

c - GTK中静态编译如何处理FileChooser

java - 使用wait()和notify()控制线程

c - 如何替换此 GOTO 语句使其清晰

c - 内存分配器 : avoid free memory twice

c - LCD 遵循命令但不显示字符

c++ - 如何使用互斥使两个线程严格交替?

c - C 中的 fork 线程正在互相写入标准输出

c++ - atomic_compare_exchange 与互斥锁

C++互斥锁定线程优先级