Mam kilka kodu wielowątkowego (patrz pytanie Windows API Thread Pool simple example), dla których używam licznika do zidentyfikowania wątku.InterlockedIncrement vs EnterCriticalSection/counter ++/LeaveCriticalSection
Polecono mi użyć InterlockedIncrement do zwiększenia tego licznika w funkcji zwrotnej wątku. Jednak nie wydawało się to poprawnie zablokować zmiennej, ponieważ napotkałem pewne problemy z współbieżnością. Zastąpiłem InterlockedIncrement ręcznie za pomocą krytycznej sekcji: EnterCriticalSection/counter ++/LeaveCriticalSection i to teraz działa idealnie.
Dlaczego tak jest? Czy dwie opcje nie powinny być dokładnie równoważne? Pamiętaj, że mówię o uruchomieniu zaledwie kilku (około 10) wątków.
W jaki sposób nie udało się poprawnie zablokować zmiennej? Jakie problemy z współbieżnością wystąpiły? – LukeH
"InterlockedIncrement" i przyjaciele nie muszą blokować. Wykonuj pojedyncze instrukcje montażu. Czy możesz bardziej opisać problemy, które widziałeś? – Nate
LukeH: licznik nie zawsze podawał ściśle rosnącą sekwencję liczb całkowitych. Czasami licznik, zaczynając od 0, robił: 0 1 2 2 4 5 ... – WhitAngl