У меня есть некоторый многопоточный код (см. Вопрос Простой пример пула потоков Windows API ), для которого я использую счетчик для идентификации потока.
Мне посоветовали использовать InterlockedIncrement для увеличения этого счетчика в функции обратного вызова потока. Однако это не помогло правильно заблокировать переменную, так как я столкнулся с некоторыми проблемами параллелизма. Я заменил InterlockedIncrement, используя вручную критический раздел: EnterCriticalSection / counter ++ / LeaveCriticalSection, и теперь он отлично работает.
Почему так? Разве эти два варианта не должны быть строго эквивалентными? Обратите внимание, что я говорю о запуске всего пары (около 10) потоков.