Я не знаю о Microsoft PPL. Я только что посмотрел на заголовочные файлы Intel Thread Building Blocks для Intel concurrent_unordered_map и его функция insert
возвращает false
в качестве второй части возвращаемой пары, когда ключ уже находится на карте.
Кажется, это именно то, что вам нужно. Сделайте вставку, и если она возвращает true
, то это была новая вставка. Если он возвращает false
, значит, он уже был на карте.
Редактировать: Кажется, здесь какая-то путаница. Я не имел в виду, что вы всегда должны запускать вставку. Я имел в виду, что вы должны искать значение и, если оно отсутствует, попробуйте вставить. Два или более потоков могут иногда состязаться на вставке, поэтому работа будет дублироваться, но это должно быть редким явлением.