1

这只是说明我的问题的示例代码。

假设我有以下课程:

enter code here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Concurrent;


namespace BoxesA4
{
class Box
{
    public double length { get; set; }
    public double width { get; set; }
    public double height { get; set; }

ConcurrentDictionary<int, string> boxItems = new ConcurrentDictionary<int, string>();


    public Box(double length,double width,double height)
    {
        this.length=length;
        this.width = width;
        this.height = height;

    }

    public double volume()
    {
        return this.length * this.width * this.height;
    }

    public void add(int index,string item)
    {
        boxItems.TryAdd(index, item);

    }



    }
}

主要的:

    static void Main(string[] args)
    {
       Box createBox = new Box(10,10,5,5);
       createBox.add(0,"hammer");
       createBox.add(1,"saw");

    }

在我的主要方法中,我调用 createBox.add(); 并传递必要的论据。在调用我的 add 方法时,我是否需要担心线程安全?我不想让 Box 类 static。如果线程安全是一个问题,我将如何修复我的代码?

4

2 回答 2

1

假设 的行为ConcurrentDictionary.TryAdd符合您的要求,您就可以了。boxItems如果您将该字段设置为只读,您将处于更好的位置。

当您使用并发集合时,值得详细阅读文档,以确切了解会发生什么。例如,您可能想要AddOrUpdate代替TryAdd-如果字典中已经存在密钥,您希望发生什么?

于 2013-07-31T15:13:44.020 回答
0

Thread safety is not an issue in your case. 您的 box.add 方法有效地添加到线程安全的并发字典中。所以你不必担心线程安全。

于 2013-07-31T15:13:31.357 回答