0

私はクラスを持っています(stl::map<int, *msg> msg_containerここでmsgは関係ありません)。

複数のスレッドがグローバルmsg_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 がクラスなら msg * がポインタ型になるようにstl::map<int, *msg> msg_container;「 」と書くべきだと思います。stl::map<int, msg *> msg_container;タイプミスに違いありません。

于 2013-07-17T07:20:01.293 に答える
0

msg_container_copy他のスレッドがアクセスできないため、アクセスするためのロックは必要ありません。

ポインターが他のスレッドと共有されているため、含まれているポインターを逆参照するときにロックが必要になる場合があります。それらのポインターをどうするかによって異なります。

于 2013-07-17T09:12:05.997 に答える