pthread_mutex_lock需要很长时间

时间:2014-06-25 13:33:48

标签: c linux multithreading tcp udp

在我用C语言编写的应用程序中,我有两个主题:

第一个线程包含一个用于进程间通信的UDP侦听器,用于发送信号。当一个信号到达这个线程时,它会尝试使用pthread_mutex_lock锁定第二个线程来执行某些功能,然后解锁它,第二个线程继续正常执行。

我注意到锁定线程会消耗太多时间,例如大约100毫秒,这太多了。但有时它消耗不到10毫秒左右,这对我来说没问题。

所以有人能告诉我发生了什么,为什么我在可执行代码中获得了那么多的时间变化?有没有更好的方法来实现我正在做的更好的方式,即锁定和解锁?

注意:我在使用Linux Ubuntu x64位的虚拟机中运行我的应用程序,具有2GB内存和2个CPU,最终输出处于发布模式。

1 个答案:

答案 0 :(得分:1)

重述问题:您有一个负责处理某些数据的工作线程,以及一个控制工作人员活动的监控线程。您希望知道为什么在通过互斥锁争用锁停止工作线程时存在延迟。

只有当此线程试图锁定线程时,互斥锁才可能阻塞线程。如果该线程在到达尝试锁定互斥锁的那一点之前进行了一些计算,则会遇到延迟。当监视线程锁定互斥锁时,延迟将根据线程执行的位置而有所不同。

减少延迟的唯一方法是减少互斥锁尝试之间的工作负载,但这也会降低吞吐量。