Синхронизация в Win-API
Синхронизационные объекты 1 Синхронизационный объект это такой объект который может быть использован как аргумент в одной из функций ожидания (wait function). Синхронизационный объект может находиться в «сигнальном» или «не- сигнальном» состоянии. Несколько процессов могут использовать один и тот же синхронизационный объект. Доступ к синхронизационный объекту осуществляется через «handle».
Синхронизационные объекты 2 Event – для уведомления одного или более ждущих потоков о произошедшем событии. Mutex – захватывается одновременно только одним потоком. Используется для алгоримов взаимного исключения. Семафор – используется для ограничения числа потоков к одновременно использующих разделяемый ресурс Waitable timer – уведомляет ожидающий поток о наступлении указанного времени
Синхронизационные объекты 3 Change notification - сигнализирует об изменениях в файловой системе (каталоге) Console input – сигнализирует о входных данных с консоли. Job – завершение всех процессов JOBа (end- of-job time limit) Memory resource notification – сигнализирует о изменениях в физической памяти Process – сигнализирует о завершении процесса Thread – сигнализирует о завершении потока
Синхронизационные объекты 4 Файлы (file), Именованные каналы (named pipe), или communications device могут использоваться как СО, но для них рекомендуется использовать «OVERLAPPED» ввод-вывод.
Wait Functions single-object multiple-object alertable registered
single-object wait functions DWORD SignalObjectAndWait ( __in HANDLE hObjectToSignal, __in HANDLE hObjectToWaitOn, __in DWORD dwMilliseconds, __in BOOL bAlertable ); DWORD WaitForSingleObject ( HANDLE hHandle, DWORD dwMsecs ); DWORD WaitForSingleObjectEx ( __in HANDLE hHandle, \ __in DWORD dwMilliseconds, __in BOOL bAlertable );
Функции ожидания DWORD WaitForMultipleObjects ( DWORD nCount, const HANDLE* lpHandles, BOOL bWaitAll, DWORD dwMsecs ); DWORD MsgWaitForMultipleObjects( __in DWORD nCount, __in const HANDLE *pHandles, __in BOOL bWaitAll, __in DWORD dwMilliseconds, __in DWORD dwWakeMask );
WaitForSingleObject Change notification Console input Event Memory resource notification Mutex Process Semaphore Thread Waitable timer
WaitForSingleObject WAIT_OBJECT_0 -указанный объект находится в сигнальном состоянии; WAIT_TIMEOUT - истек период ожидания. WAIT_ABANDONED – мутекс не освобожден умершим потоком. WAIT_FAILED – ошибка информацию об ошибке можно получить, вызвав функцию GetLastError.
us/library/ms684242(VS.85).aspxhttp://msdn.microsoft.com/en- us/library/ms684242(VS.85).aspx