У меня проблема, когда несколько потоков пытаются увеличить 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 увеличивается на единицу каждый раз, когда поток выполняет этот код.Однако это не так.Я также пытался использовать блокировку (новый объект ()), но это не работает так же хорошо.Проблема заключается в том, что не все хранилища собирают данные, потому что (при отладке) _StoreIndex выглядит, например, как 0, 1, 1, 3, 4, 5.Второй объект в списке явно пропущен.
Что я делаю не так?Заранее спасибо.