臨界區對象TCriticalSection(Delphi) 與 TRtlCriticalSection 的區別
TRtlCriticalSection 是一個結構體,在windows單元中定義;
是InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection, DeleteCriticalSection 等這幾個kernel32.dll中的臨界區操作API的參數;
TCriticalSection是在SyncObjs單元中實現的類,它對上面的那些臨界區操作API函數進行了了封裝,簡化並方便了在Delphi的使用;
如TCriticalSection.Enter;就是調用了EnterCriticalSection這個API函數。
多線程程序中,如果各個線程要訪問同一個資源,如同一個變量
這時就要使用線程同步技術,纔不會使線程之間產生衝突和干擾
線程同步有多種辦法,使用臨界區是其中最簡單,也是效率最高的辦法(CPU佔用時間最少)
使用臨界區代碼如下:
先聲明一個TRTLCriticalSection類型的全局變量
var
MyCs:TRTLCriticalSection;
在程序開始或建立線程之前,初始化
InitializeCriticalSection(MyCs);//初始化臨界區
在程序結束或所有線程結束後,刪除它
DeleteCriticalSection(MyCs);//刪除臨界區
再在線程中要同步的地方加入
EnterCriticalSection(MyCs); //進入臨界區
try
//程序代碼
finally
LeaveCriticalSection(MyCs); //離開臨界區
end;