CS , , . 8.1, , (deadlock), , .
, (lock) . :
, , .
, X . , : "X , ".
, . . , .
( CS), . , , " ".
, :
static struct {
/* : . */
HANDLE guard; /* . */
struct ListStuff;
} ListA, ListB;
DWORD WINAPI AddSharedElement(void *arg) /* . */
{ /* : , . */
WaitForSingleObject(ListA.guard, INFINITE);
WaitForSingleObject(ListB.guard, INFINITE);
/* */
ReleaseMutex(ListB.guard);
ReleaseMutex(ListA.guard);
return 0;
}
DWORD WINAPI DeleteSharedElement(void *arg) /* . */
{
WaitForSingleObject(ListB.guard, INFINITE);
WaitForSingleObject(ListA.guard, INFINITE);
/* */
ReleaseMutex(ListB.guard);
ReleaseMutex(ListA.guard);
return 0;
}
. AddSharedElement , , , , , DeleteSharedElement , AddSharedElement. , , ReleaseMutex, .
|
|
, , .
, , " ", WaitForSingleObject , , , "" , . , , .
, , " " , , . , . , , , .
WaitForMultipleObjects fWaitAll, True, , . CRITICAL_SECTION .
: CRITICAL_SECTION
, CRITICAL_SECTION . , , , - , , , . , . , .
, , , .
, CS .
, , .
WaitForMultipleObjects, , .
, , , . CS .
, , CS , . 9.