Вобщем есть у меня функция, которая должна выполняться только в одном потоке. Причём если её вызывают несколько потоков, то они доджны ожидатьпока завершится предидущий. я сделал примерно следующее: Код (Text): ULONG Mutex; void func() { while (Mutex) Sleep(50); Mutex = 1; ... Mutex = 0; return; } Но в данном случае потоки могут вызывать её не по порядку. то есть нужно, чтобы выполнялся первым тот поток, который первый её вызвал.
If multiple threads call EnterCriticalSection, and the critical section is currently owned by a different thread, the highest priority thread among the calling threads gets the critical section first after the current thread leaves the critical section. If all the calling threads have the same priority, a first-in, first-out (FIFO) basis is used after the current thread leaves the critical section. Quark Так что сам думай, подойдут ли тебе они.
CRITICALSECTION CRITICAL_SECTION <?> ;структура критической секции invoke InitializeCriticalSection,offset CRITICALSECTION;создание критической секции (при запуске проги) invoke DeleteCriticalSection,offset CRITICALSECTION ;удалоить критическую секцию (при закрытии) invoke EnterCriticalSection,offset CRITICALSECTION;вход в критическую секцию (с этого момента работает тока один поток) invoke LeaveCriticalSection,offset CRITICALSECTION;выходи из критической секции (до этого момента)