首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

多線程程式設計(7):CreateThread 參數深度解析[續五]——核心同步物件安全屬性

     編輯:Delphi

CreateThread 第一參數:lpThreadAttributes 安全屬性

lpThreadAttributes 指向 TSecurityAttributes 結構,控制線程句柄的繼承性與安全描述符。多線程編程中幾乎總是傳 nil,使用預設安全性(不可繼承、預設 DACL)。

結構定義

type
  _SECURITY_ATTRIBUTES = record
    nLength: DWORD;              // 結構大小,必須填 SizeOf(TSecurityAttributes)
    lpSecurityDescriptor: Pointer; // 安全描述符指標,nil 為預設
    bInheritHandle: BOOL;        // TRUE: 子進程可繼承此句柄
  end;

  _SECURITY_DESCRIPTOR = record  // 內部結構,極少手動構建
    Revision: Byte;
    Sbz1: Byte;
    Control: SECURITY_DESCRIPTOR_CONTROL;
    Owner: PSID;
    Group: PSID;
    Sacl: PACL;
    Dacl: PACL;
  end;

核心同步物件同樣擁有安全屬性

建立 Event、Mutex、Semaphore、WaitableTimer 等核心物件時,第一參數同為 PSecurityAttributes,用法一致:

function CreateEvent(lpEventAttributes: PSecurityAttributes; ...): THandle;
function CreateMutex(lpMutexAttributes: PSecurityAttributes; ...): THandle;
function CreateSemaphore(lpSemaphoreAttributes: PSecurityAttributes; ...): THandle;
function CreateWaitableTimer(lpTimerAttributes: PSecurityAttributes; ...): THandle;

實務上統統傳 nil 即可,除非你需要:

  • 自定義 ACL 限制哪些使用者/群組可存取物件
  • 設定 bInheritHandle = True 讓子進程繼承句柄 (如 CreateProcess 建立子進程共享 Mutex)

關鍵對比:CriticalSection 非核心物件

  • 無句柄、無安全屬性、不可跨進程
  • 但速度最快、最輕量
  • Windows Vista+ 新增 Condition Variables、Slim Reader-Writer Locks (SRWLOCK),效能更優、功能更豐富,仍屬使用者模式

總結:同步手段選擇指南

同步物件核心/用戶跨進程速度典型用途
CriticalSection / SRWLOCK用戶模式否最快高頻短關鍵區、進程內
Mutex核心模式是 (具名)中跨進程互斥、需遺棄檢測
Semaphore核心模式是 (具名)中資源計數控制 (連接池、執行緒池)
Event (Manual/Auto Reset)核心模式是 (具名)中線程通知/喚醒、單次/持續訊號
WaitableTimer核心模式是 (具名)中精確定時喚醒、週期性任務
Condition Variable (Vista+)用戶模式否極快複雜等待條件、生產者消費者

下一步預告

下一篇將正式進入多線程同步實戰,從 CriticalSection 開始,依序講解 Mutex、Semaphore、Event、Waitable Timer 的具體應用模式與範例代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved