Jest sobie program http://4programmers.net/Pastebin/1854 , który odpala dwa wątki oraz przeprowadza synchronizacje b. prostym algorytmem bez używania jawnych locków. CriticalSectionFunc zlicza ile watkow dostalo sie do sekcji krytycznej. Jezeli algorytm jest poprawny to tylko jeden watek bedzie w sekcji krytycznej.
Niestety po odpaleniu programu na konsoli pokazuje się tekst:
ok [21250172], err [63], err % [0.000296]
Co oznacza, że algorytm 63 razy wpuścił do sekcji krytycznej dwa wątki jednocześnie.
Pytanie konkursowe: co jest nie tak i jak to poprawić?
Założenia: program ma działać na x86 lub x64 i ma **NIE **używać gotowych metod synchronzacji (typu CRITICAL_SECTION, semaforów, mutexów etc.). Testowane na VS2010 i na MinGW ale niewykluczone, że (nie)działa także na innych kompilatorach.