7

ConcurrentDictionaryがあり、ifステートメント内でTryGetValueを使用する場合、これによりifステートメントのコンテンツスレッドが安全になりますか?または、ifステートメント内でロックする必要がありますか?

例:

        ConcurrentDictionary<Guid, Client> m_Clients;

        Client client;
        //Does this if make the contents within it thread-safe? 
        if (m_Clients.TryGetValue(clientGUID, out client))
        {
            //Users is a list.
            client.Users.Add(item);
        }

または私はしなければなりませんか:

        ConcurrentDictionary<Guid, Client> m_Clients;

        Client client;
        //Does this if make the contents within it thread-safe? 
        if (m_Clients.TryGetValue(clientGUID, out client))
        {
            lock (client)
            {
                //Users is a list.
                client.Users.Add(item);
            }
        }
4

3 に答える 3

7

はい、ifステートメント内でロックする必要があります。並行ディクショナリから得られる唯一の保証は、そのメソッドがスレッド保存であるということです。

于 2012-11-07T20:49:31.763 に答える