Squash Забейте на симофор, а то вообще не получится что то вам объяснить, юзайте код из поста 18, только доделаете его, а то я на "коленке" писал.(Interlocked, Создания и разрушения )
Squash А вот это и не слив, просто там будет цикл (Как просто с Interlock), но зато это штука будет меж процессорная ...
мой из путей посложнее Код (Text): int cnt = 0; int crt_trd_wrp(...){ while(1){ _asm { mov eax, -1 xchg eax, cnt inc eax jz W mov cn , eax } // создаем поток и выходим W: Sleep(0); } } int exi_trd_wrp(...){ while(1){ _asm { mov eax, -1 xchg eax, cnt dec eax cmp eax, -2 jz W mov cn , eax } // удаляем поток и выходим W: Sleep(0); } } void exi_prc_wrp(...){ while(1){ _asm { mov eax, cnt cmp eax, 0 jnz W } // выходим W: Sleep(0); } } хотя разумнее енумеровать перед закрытием и ждать по хэндлам. или еще вначале создавать массив на максимум потоков и забрасывать-удалять оттуда. система же не выдержит любое число потоков? массив на 1000 хэндлов - вполне разумный максимум. можно и сложнее чтотo придумать если охота.
Сталкивался , в несколько другом контексте, по эвенту не исключены ошибки: http://www.wasm.ru/forum/viewtopic.php?id=43187