Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在多个线程之间同步。只有一个是写作_C++_Multithreading_Boost_Concurrency_Locking - Fatal编程技术网

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

C++ 如何在多个线程之间同步。只有一个是写作,c++,multithreading,boost,concurrency,locking,C++,Multithreading,Boost,Concurrency,Locking,进程在其生命周期内有1个主线程和1到50个其他工作线程。 当主线程接受新连接时,它会将其保存在boost::unordered_映射中,让我们称之为“newconcontainer”。工作线程会不时检查“new con container”中的新连接。出于同步目的,有一个boost::mutex。当主线程写入“newconcontainer”时,它会锁定这个互斥锁。工作线程在检查此容器时也会锁定互斥锁 工作线程有没有办法不锁定互斥锁并从“新con容器”安全地读取线程?工作者线程在套接字上进行实时

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


工作线程有没有办法不锁定互斥锁并从“新con容器”安全地读取线程?工作者线程在套接字上进行实时操作,因此锁定互斥的性能。

< P>如果您有一个写入器,多个读者考虑使用:

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

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

您还可以对容器进行分区。不要只有一个容器,而是使用更多的容器,并为每个容器分配一组固定的线程。然后,主线程将每个新连接推送到不同的容器

问候
Torsten

一个工作线程如何决定应该处理哪个新连接,下一个工作线程如何知道不在同一个连接上工作?goog:许多读写线程的线程应该调用lock();读线程应该在共享互斥体上调用lock_shared()。是吗?@Didar_Uranov:这里有一些关于共享锁的好例子:这绝对是我需要的!谢谢!