tryEnterCriticalSection 函式 (synchapi.h)
嘗試輸入重要區段而不封鎖。 如果呼叫成功,呼叫線程會取得重要區段的擁有權。
語法
BOOL TryEnterCriticalSection(
[in, out] LPCRITICAL_SECTION lpCriticalSection
);
參數
[in, out] lpCriticalSection
重要區段物件的指標。
傳回值
如果成功輸入關鍵區段,或目前的線程已經擁有關鍵區段,則傳回值為非零。
如果另一個線程已經擁有關鍵區段,則傳回值為零。
備註
單一進程的線程可以使用重要區段對象進行互斥同步處理。 此進程負責配置重要區段物件所使用的記憶體,其方式是宣告類型 為 CRITICAL_SECTION的變數。 使用重要區段之前,進程的某些線程必須呼叫 InitializeCriticalSection 或 InitializeCriticalSectionAndSpinCount 函式來初始化物件。
若要啟用共用資源的互斥用法,每個線程都會呼叫 EnterCriticalSection 或 TryEnterCriticalSection 函式,先要求重要區段的擁有權,再執行使用受保護資源的任何程式代碼區段。 差別在於 ,不論 TryEnterCriticalSection 是否取得重要區段的擁有權,TryEnterCriticalSection 都會立即傳回,而 EnterCriticalSection 會封鎖直到線程可以取得重要區段的擁有權為止。 當它完成執行受保護的程式代碼時,線程會使用 LeaveCriticalSection 函式來放棄擁有權,讓另一個線程成為擁有者並取得受保護資源的存取權。 每次進入關鍵區段時,線程都必須呼叫 LeaveCriticalSection 一次。
進程的任何線程都可以使用 DeleteCriticalSection 函式來釋放初始化重要區段物件時所配置的系統資源。 呼叫此函式之後,就無法再使用重要區段對象來進行同步處理。
如果線程在具有重要區段的擁有權時終止,則重要區段的狀態為未定義。
若要編譯使用此函式的應用程式,請將 _WIN32_WINNT 定義為 0x0400
或更新版本。 如需詳細資訊,請參閱 使用 Windows 標頭。
規格需求
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | synchapi.h (包含 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |