c# - C#中的线程安全增量

标签 c# multithreading thread-safety increment

我正在尝试在 C# 中增加列表中的一个元素,但我需要它是线程安全的,因此计数不会受到影响。

我知道您可以对整数执行此操作:

Interlocked.Increment(ref sdmpobjectlist1Count);

但这不适用于我目前拥有以下列表的列表:

lock (padlock)
{
     DifferenceList[diff[d].PropertyName] = DifferenceList[diff[d].PropertyName] + 1;
}

我知道这行得通,但我不确定是否有其他方法可以做到这一点?

最佳答案

正如 David Heffernan 所说,ConcurrentDictionary 应该提供更好的性能。但是,根据多个线程尝试访问缓存的频率,性能提升可能可以忽略不计。

using System;
using System.Collections.Concurrent;
using System.Threading;

namespace ConcurrentCollections
{
    class Program
    {
        static void Main()
        {
            var cache = new ConcurrentDictionary<string, int>();

            for (int threadId = 0; threadId < 2; threadId++)
            {
                new Thread(
                    () =>
                    {
                        while (true)
                        {
                            var newValue = cache.AddOrUpdate("key", 0, (key, value) => value + 1);
                            Console.WriteLine("Thread {0} incremented value to {1}",
                                Thread.CurrentThread.ManagedThreadId, newValue);
                        }

                    }).Start();
            }

            Thread.Sleep(TimeSpan.FromMinutes(2));
        }
    }
}

关于c# - C#中的线程安全增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15888234/

相关文章:

c# - 'IMutableEntityType' 不包含 'Cosmos' 的定义,并且没有可访问的扩展方法 'Cosmos' 接受第一个参数

java - 直到退出并再次运行应用程序后,服务才会启动 - Android

c++ - 条件变量死锁

Java线程安全的数据库连接

c# - app.config 没有保存值

c# - SignalR Client 是否在 .NET Compact Framework 上运行?

c# - .NET基本线程-为单个读取器和单个写入器线程同步对象的最有效方法

python-3.x - Tkinter:使用 after() 使函数定期运行

java - HashMap 对于不同的键是线程安全的吗?

java - 静态和非静态方法的同步