0

我有一个stl::map<int, *msg> msg_container, wheremsg是一个类(这里不相关)。

有多个线程添加到 globalmsg_container中,并为同步访问设置了锁。

在单独的线程中,它需要msg_container在特定时间评估本地副本并对其执行检查。伪代码如下

map<int, *msg> msg_container;
map<int, *msg> msg_container_copy;

if (appropriate_time_is_reached)
{
    msg_container_copy = msg_container;

    //perform functions on msg_container_copy
}

根据我之前的问题,我知道我需要msg_container在阅读时锁定,如果有可能其他线程正在添加它。

msg_container_copy以这种方式使用时需要锁定吗?它仅对该线程是本地的,因此没有其他线程将访问它。

4

2 回答 2

1

我认为没有必要锁定变量 msg_container_copy 如果正如您所描述的,“它只对这个线程是本地的,所以没有其他线程将访问它。”

顺便说一句,如果msg是一个类,我认为定义“ stl::map<int, *msg> msg_container;”应该写成“ stl::map<int, msg *> msg_container;”,这样msg *就是一个指针类型。一定是笔误。

于 2013-07-17T07:20:01.293 回答
0

您不需要锁来访问msg_container_copy,因为没有其他线程可以访问它。

在取消引用它包含的指针时,您可能需要一个锁,因为它们与其他线程共享。这取决于您如何处理这些指针。

于 2013-07-17T09:12:05.997 回答