0

我目前正在编写一个管理多台计算机上的并行渲染的应用程序。为此,我在我的服务器应用程序上有一个管理 TCP 连接的线程池,每个问题一个线程。如果其中一个网络线程接收到数据,我想在每个 TCP 线程中使用相同的条件变量来警告另一个线程。

问题:要使用signalPOSIX api 中的函数,我必须使用互斥锁。这意味着如果 2 个网络线程同时接收数据,它们将不得不等待互斥体空闲才能继续执行。

实际上,使用这个条件变量真的会减慢我的代码吗?如果我不想使用它,我也可以在另一个线程(调用wait条件变量的那个)中创建一个循环指令,以查看我的网络线程是否收到了一些东西。

非常感谢 :)

4

1 回答 1

0

可能不是。如果您所做的只是锁定互斥体并向条件变量发出信号,那么这并不比在受互斥体保护的工作队列中获取下一项更糟糕。

理论上,您可以用轮询标志的 while 循环替换对条件变量的等待,但是在访问此标志时必须确保使用正确的同步(内存屏障)。这也将付出代价。由于各种原因,忙碌的等待也不理想,并且添加睡眠会引入延迟。

于 2012-02-12T22:21:05.157 回答