|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
EnterCriticalSection
The EnterCriticalSection function waits for ownership of the specified critical section object. The function returns when the calling thread is granted ownership.
VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection // pointer to critical section object );
Parameters
lpCriticalSection
Points to the critical section object.
Return Values
This function does not return a value.
Remarks
The threads of a single process can use a critical section object for mutual-exclusion synchronization. The process is responsible for allocating the memory used by a critical section object, which it can do by declaring a variable of type CRITICAL_SECTION. Before using a critical section, some thread of the process must call the InitializeCriticalSection function to initialize the object. To enable mutually exclusive access to a shared resource, each thread calls the EnterCriticalSection or TryEnterCriticalSection function to request ownership of the critical section before executing any section of code that accesses the protected resource. The difference is that TryEnterCriticalSection returns immediately, regardless of whether it obtained ownership of the critical section, while EnterCriticalSection blocks until the thread can take ownership of the critical section. When it has finished executing the protected code, the thread uses the LeaveCriticalSection function to relinquish ownership, enabling another thread to become owner and access the protected resource. The thread must call LeaveCriticalSection once for each time that it entered the critical section. The thread enters the critical section each time EnterCriticalSection and TryEnterCriticalSection succeed.
Once a thread has ownership of a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution. This prevents a thread from deadlocking itself while waiting for a critical section that it already owns. Any thread of the process can use the DeleteCriticalSection function to release the system resources that were allocated when the critical section object was initialized. After this function has been called, the critical section object can no longer be used for synchronization.
See Also
DeleteCriticalSection, InitializeCriticalSection, LeaveCriticalSection TryEnterCriticalSection
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
EnterCriticalSection
Функция EnterCriticalSection ждет собственность на определенный критический объект секции. Функция возвращается когда вызывающей резьбе предоставляют собственность.
ПУСТОТА EnterCriticalSection(
указатель LPCRITICAL_SECTION lpCriticalSection // на критический объект секции );
Параметры
lpCriticalSection
Точки на критический объект секции.
Обратные Величины
Эта функция не возвращает величину.
Замечания
Резьба единственного процесса может использовать критический объект секции для взаимного исключения синхронизации. Процесс ответственный за распределение памяти использованной критическим объектом секции, какое это может сделать посредством объявляющей переменной типа CRITICAL_SECTION. Перед использованием критической секции, некоторая резьба процесса должна назвать функцию InitializeCriticalSection, чтобы инициализировать объект. Чтобы приспосабливаться взаимно исключительный доступ к коллективному ресурсу, каждая резьба называет EnterCriticalSection или функцию TryEnterCriticalSection, чтобы просить собственность на критическую секцию перед выполнять любой секции кода, которое имеет доступ к защищенному ресурсу. Различие -, что возврат TryEnterCriticalSection немедленно, независимо от того, что получено собственность на критическую секцию, тогда как EnterCriticalSection блокируется пока резьба не может взять собственность на критическую секцию. Когда это завершило выполняя защищенный код, резьба использует функцию LeaveCriticalSection, чтобы освобождать собственность, приспосабливающуюся другую резьбу, чтобы становиться владельцем и иметь доступ к защищенному ресурсу. Резьба должна назвать LeaveCriticalSection как только в течение всякий раз, когда, который он ввел критическую секцию. Резьба вводит критическую секцию всякий раз, когда EnterCriticalSection и TryEnterCriticalSection добивается успеха.
Как только резьба имеет собственность на критическую секцию, она может сделать дополнительными вызовами на EnterCriticalSection или TryEnterCriticalSection не блокируя выполнение. Это предохраняет резьбу от deadlocking себя при ожидании критической секции, которым он уже обладает. Любая резьба процесса может использовать функцию DeleteCriticalSection, чтобы выпускать системные ресурсы, которые были распределены когда критический объект секции был инициализирован. После того, как эта функция будет названа, критический объект секции не может больше использован для синхронизации.
Смотри Также
DeleteCriticalSection, InitializeCriticalSection, LeaveCriticalSection TryEnterCriticalSection
|
|
|
|
| |