如何锁定由属于2个不同类的2个线程修改的数据结构

时间:2015-06-02 05:54:57

标签: c++ multithreading mutex

基本上,我有一个std :: map,它在两个类之间共享。 A类的Thread1持续监视此地图以获取一些信息并相应地采取行动,并且 B类的Thread2在接收到某个套接字上的某些数据时更新此映射。

现在我怎么能防止这个地图被破坏,因为它被2个不同类的2个线程修改了?

一种方法是我可以在map中为每个条目保留一个额外的bool变量,并在修改map之前将其设置为True,并在修改后将其设置为False。 如果另一个线程(Thread2)发现此bool变量已经为True,那么它知道Thread1正在修改它,并且应该等待。 但这种方法有效吗?

1 个答案:

答案 0 :(得分:1)

您应该使用std::mutex保护地图。用bool保护它,然后考虑当bool表示“采取”等时该怎么做 - 只是意味着你试图重新实现互斥。您可能无法比库版本更有效地完成它。

此外,在其中一个线程需要等待地图中的更改继续进行的任何情况下,请使用(一个或多个)std::condition_variable s。