进程在其生命周期内有1个主线程和1到50个其他工作线程。 当主线程接受新连接时,它将其保存在boost :: unordered_map中,让我们称之为“新的con容器”。工作线程不时检查新连接的“新con容器”。出于同步目的,有一个boost :: mutex。当主线程写入“新con容器”时,它会锁定此互斥锁。检查此容器时的工作线程也会锁定互斥锁。
工作线程是否有办法不锁定互斥锁并从“新的con容器”中安全地读取线程?工作线程对套接字进行实时操作,因此锁定互斥锁可以提高性能。
答案 0 :(得分:4)
如果您有一位作家和多位读者,请考虑使用shared_mutex:
类boost :: shared_mutex提供了一个实现 多读者/单作家互斥。
答案 1 :(得分:0)
不是通过工作线程轮询“新的con容器”,而是应该使用条件变量让工作程序阻塞,直到其中一个人有事情要做。这将减少争用,从而减少锁的开销。
您可以对容器进行分区。而不是拥有一个容器,使用更多,并为每个容器分配一组固定的线程。然后主线程将每个新连接推送到不同的容器。
亲切的问候 托