当多个线程试图增加 int 时,我遇到了一个问题。这是我的代码:
private int _StoreIndex;
private readonly List<Store> _Stores = new List<Store>();
public void TestThreads()
{
_StoreIndex = 0;
for (int i = 0; i < 20; i++)
{
Thread thread = new Thread(() =>
{
while (_StoreIndex < _Stores.Count - 1)
{
_Stores[Interlocked.Increment(ref _StoreIndex)].CollectData();
}
});
thread.Start();
}
}
我希望每次线程执行此代码时 int 都会增加 1。然而,事实并非如此。我也尝试过使用 lock (new object()),但这也不起作用。问题是并非所有商店都收集数据,因为(调试时),_StoreIndex 就像 0、1、1、3、4、5 一样。列表中的第二个对象显然被跳过了。
我做错了什么?提前致谢。
最佳答案
在您的情况下,我首先会使用 TPL 来避免手动创建线程和索引的所有这些问题:
Parallel.ForEach(_Stores, (store) => store.CollectData());
关于c# - 多线程增加int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332141/