3

进程在其生命周期内有 1 个主线程和 1 到 50 个其他工作线程。当主线程接受新连接时,它会将其保存在 boost::unordered_map 中,我们称之为“新 con 容器”。工作线程不时检查“新 con 容器”是否有新连接。出于同步目的,有一个 boost::mutex。当主线程写入“new con container”时,它会锁定这个互斥锁。检查此容器时的工作线程也会锁定互斥锁。

有没有办法让工作线程不锁定互斥锁并从“新con容器”中安全地读取?工作线程对套接字进行实时操作,因此锁定互斥体会影响性能。

4

2 回答 2

4

如果您有一个作家和多个读者,请考虑使用shared_mutex

boost::shared_mutex 类提供了多读取器/单写入器互斥锁的实现。

于 2012-07-04T08:08:18.663 回答
0

而不是由工作线程轮询“新con容器”,您应该使用条件变量让工作人员阻塞,直到其中一个人有事情要做。这将减少争用,从而减少锁的开销。

另外,您可以对容器进行分区。与其拥有一个容器,不如使用更多并为每个容器分配一组固定的线程。然后主线程会将每个新连接推送到不同的容器。

亲切的问候托斯滕

于 2012-07-04T08:15:50.113 回答