Ваш код не использует InterlockedIncrement
правильно.
InterlockedIncrement(&(thread.threadCount));
DWORD tid = (thread.threadCount-1)%thread.size();
При этом выполняется атомарный прирост thread.threadCount
, но вместо сохранения атомарно-увеличенного значения вы игнорируете его и возвращаетесь кthread.threadCount
переменная (которая может быть увеличена другим потоком за это время).
В вашем случае получается, что два потока сделали InterlockedIncrement
почти одновременно, увеличивая его с 1 до 2, затемОт 2 до 3. Затем оба потока читают thread.threadCount
и возвращают 3 (затем вычитают 1, чтобы получить конечный результат 2).
Правильный код:
LONG tidUnique = InterlockedIncrement(&(thread.threadCount));
DWORD tid = (tidUnique-1)%thread.size();
Уникальный увеличенныйзначение возвращается InterlockedIncrement
.Вам нужно использовать это значение в своих вычислениях, если вы хотите увидеть уникальное значение.