Слайд 1Պրոցեսների և հոսքերի սինխրոնիզացիա
Слайд 2Ներածություն
Ինչ խնդիրներ կարող են ծագել բազմապրոցեսային և բազմահոսքային ծրագրավորման դեպքում?
Ինչպես լուծել
դրանք?
Слайд 3Սինխրոնիզացիան օգտագործողի ռեժիմում – interlocked խումբը
LONG InterlockedExchangeAdd( PLONG volatile plAddend, LONG
lIncrement);
PVOID InterlockedExchangePointer( PVOID* volatile ppvTarget, PVOID pvValue);
LONGLONG InterlockedAdd64( LONGLONG* Destination, LONGLONG Value)
Слайд 4CRITICAL_SECTION
CRITICAL_SECTION
VOID InitializeCriticalSection(PCRITICAL_SECTION pcs);
VOID DeleteCriticalSection(PCRITICAL_SECTION pcs);
Слайд 5CRITICAL_SECTION
VOID EnterCriticalSection(PCRITICAL_SECTION pcs);
BOOL TryEnterCriticalSection(PCRITICAL_SECTION pcs);
VOID LeaveCriticalSection(PCRITICAL_SECTION pcs);
Слайд 6Սինխրոնիզացիան կեռնելի ռեժիմում
Քնած-արթուն ռեժիմ (signaled, non signaled)
Processes
Threads
Jobs
File and console standard input/output/error
streams
Events
Waitable timers
Semaphores
Mutexes
Слайд 7Wait ֆունկցիաները
DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds);
WAIT_OBJECT_0
WAIT_TIMEOUT
WAIT_FAILED
DWORD
WaitForMultipleObjects( DWORD dwCount, CONST HANDLE* phObjects, BOOL bWaitAll, DWORD dwMilliseconds);
Слайд 8Event
HANDLE CreateEvent( PSECURITY_ATTRIBUTES psa, BOOL bManualReset, BOOL bInitialState, PCTSTR pszName);
BOOL
SetEvent(HANDLE hEvent);
BOOL ResetEvent(HANDLE hEvent);
Слайд 9Semaphore
HANDLE CreateSemaphore( PSECURITY_ATTRIBUTE psa, LONG lInitialCount, LONG lMaximumCount, PCTSTR pszName);
BOOL
ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, PLONG plPreviousCount);
Слайд 10Mutex
HANDLE CreateMutex( PSECURITY_ATTRIBUTES psa, BOOL bInitialOwner, PCTSTR pszName);
HANDLE OpenMutex( DWORD
dwDesiredAccess, BOOL bInheritHandle, PCTSTR pszName);
BOOL ReleaseMutex(HANDLE hMutex);