delphi:臨界區對象TCriticalSection(Delphi) 與 TRtlCriticalSection 的區別

臨界區對象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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章