首页 > 解决方案 > 在每个线程中获取下一个值的正确方法是什么?

问题描述

我有一个多线程场景,我处理了 1000 个线程:

private ConcurrentDictionary<TableNames, int> _lastInsertedIds = new ConcurrentDictionary<TableNames, int>();

Parallel.For(0, 100, i => {
  var id = ++_lastInsertedIds[TableNames.Scores];
});

无论执行顺序如何,如何确保 id 始终是下一个最高的?

我想避免使用手动锁定对象。

标签: c#multithreadinglockingconcurrentdictionary

解决方案


您可以使用AddOrUpdate

Parallel.For(0, 100, i => {
  var id = _lastInsertedIds.AddOrUpdate(TableNames.Scores, 1, (key, existing) => existing + 1);
});

推荐阅读