【发布时间】:2017-08-18 06:01:47
【问题描述】:
在我正在编写的一个简单的服务器-客户端机制中,服务器将一组键值映射存储在一个 STL 映射中。为了与多个客户端交谈,为每个客户端创建一个单独的线程,并且我使用 std::ref 将映射传递给线程(我需要一个公共密钥库)。虽然这可行,但是否有可能:
1) 如果两个客户端同时通信,那么两个线程会同时尝试修改映射?
2) 在这种情况下,会发生什么?
3) 我可以做些什么来避免坏事?
【问题讨论】:
-
客户端是写入密钥存储还是只读取?
-
看看
std::mutex。它们用于锁定某些数据,一次只能由一个线程处理。如果没有锁定,同时从多个线程访问数据很可能会导致未定义的行为。 -
@mikemb,写作和阅读。
标签: c++ multithreading