SetCriticalSectionSpinCount 函式 (synchapi.h)

設定指定之關鍵區段的微調計數。 旋轉表示當線程嘗試取得鎖定的重要區段時,線程會進入迴圈、檢查是否已釋放鎖定,以及鎖定是否未釋放,線程就會進入睡眠狀態。

語法

DWORD SetCriticalSectionSpinCount(
  [in, out] LPCRITICAL_SECTION lpCriticalSection,
  [in]      DWORD              dwSpinCount
);

參數

[in, out] lpCriticalSection

重要區段物件的指標。

[in] dwSpinCount

重要區段物件的微調計數。 在單一處理器系統上,會忽略微調計數,而關鍵區段微調計數會設定為零 (0) 。 在多處理器系統上,如果重大區段無法使用,呼叫線程會在與重要區段相關聯的旗號上執行等候作業之前,先微調 dwSpinCount 時間。 如果關鍵區段在微調作業期間變成可用狀態,則呼叫執行緒會避免等候作業。

傳回值

函式會傳回重要區段的上一個微調計數。

備註

單一進程的線程可以使用重要區段物件進行相互排除同步處理。 此程式負責配置重要區段物件所使用的記憶體,其方式是宣告類型 為 CRITICAL_SECTION的變數。 使用重要區段之前,進程的某些線程必須呼叫 InitializeCriticalSectionInitializeCriticalSectionAndSpinCount 函式來初始化物件。 您接著可以呼叫 SetCriticalSectionSpinCount 函式來修改微調計數。

微調計數對於短持續時間的重要區段很有用,這些區段可能會經歷高階競爭。 請考慮最糟的情況,其中 SMP 系統上的應用程式有兩個或三個線程會持續配置和釋放堆積中的記憶體。 應用程式會使用重要區段串行化堆積。 在最差案例中,重大區段的競爭是常數,而且每個線程都會對 WaitForSingleObject 函式進行大量處理呼叫。 不過,如果微調計數已正確設定,則呼叫線程不會在發生爭用時立即呼叫 WaitForSingleObject 。 相反地,呼叫線程可以在微調作業期間釋放時取得重要區段的擁有權。

您可以針對短期間的重要區段選擇小型微調計數,大幅改善效能。 堆積管理員會針對每個堆積關鍵區段使用大約 4000 個微調計數。 這可在幾乎所有最差案例中提供絕佳的效能和延展性。

若要編譯使用此函式的應用程式,請將_WIN32_WINNT0x0403定義為 或更新版本。 如需詳細資訊,請參閱 使用 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

另請參閱

重要區段物件

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

WaitForSingleObject

同步處理函式

VBS 記憶體保護區中可用的 Vertdll API