如何在多个线程之间同步.只有一个是写作

How to synchronize between many threads. Only one is writing

本文关键字:有一个 同步 之间 线程      更新时间:2023-10-16

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

工作线程有没有办法不锁定互斥锁并从"新容器"中线程安全读取?工作线程在套接字上执行实时操作,因此锁定互斥锁会影响性能。

如果您有单个编写器和多个读取器,请考虑使用 shared_mutex:

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

与其由工作线程轮询"新容器",不如使用条件变量让工作线程阻塞,直到其中一个线程执行某些操作。这将减少争用,从而减少锁的开销。

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

亲切问候托斯滕

相关文章: