Мне ххотелось бы узнать что-нибудь о функциях, названия которых оканчиваются на CriticalSection. Для чего они, как и когда их использовать? Можно небольшие примерчики.
в васм.инглиш есть сканер сети - там єто используется http://wasm.ru/forum/index.php?action=vthread&forum=22&topic=9916
shoo Там комментариев 0. Хотелось бы что бы все толком объяснили. TermoSINteZ Если в интернете нет, покупать я ее не буду, так как о CriticalSection мне нужно узнать пока только основное.
толково объяснять некогда, но, может, этого окажется достаточно: Код (Text): stCS CRITICAL_SECTION {?} ; структура для данных секции Arp_IP2MAC proc dwIpaddr:DWORD ; процедура потока ... invoke EnterCriticalSection,ADDR stCS ... ; код, расположенный здесь, ... ; выполняется для каждого потока отдельно ... ; или, правильней, "неодновременно" - ... ; пока один выполняет - остальные ждут invoke LeaveCriticalSection,ADDR stCS ... invoke ExitThread,0 Arp_IP2MAC endp getMAC proc lhwnd:DWORD ... ; создаем секцию (до начала работы потоков) invoke InitializeCriticalSection,ADDR stCS ... ; создаем в цикле несколько потоков invoke CreateThread,... ... ; удаляем секцию (работа потоков закончена) invoke DeleteCriticalSection,ADDR stCS ... invoke ExitThread,0 getMAC endp
если коротко - то эти функции используются для синхронизации потоков то есть избежания одновременного изменения неатомарных данных 1.)поток вызывающий EnterCriticalSection первым - выполняется 2.) второй поток, вызывает ту же функцию и и она не возвращается до тех пор, пока первый не вызовет leavecriticalsection note прежде чем использовать cs должна быть создана InitializeCriticalSection потоков может быть не два а сколько угодно (в пределах ограничений ос) используется это для того , чтобы , например разные потоки в одно и то же время не read/write одно и ту же структуру данных. что в многопоточной среде может привести к повреждению данных
dr_dred Объект Mutex больше подходит для синхронизации потоков принадлежащих разным процессам. Критические секции предназначены для синхронизации потоков работающих внутри одного процесса. Синхронизация с помощью критических секций требует меньше накладных расходов, т.е. работает быстрее.
dr_dred like it said : Enter(ing) Critical Section(of code wich will be guarded up until we Leav[ing this] Critical Section of code) или ты думаешь что слово section имеет какое-то значение раз и на всегда утверждённое?