線程同步之一(一)

1.原子互鎖家族函數:

1、InterlockedIncrement:加1操作;
2、InterlockedDecrement:減1操作;
3、InterlockedExchangeAdd:加上“指定”的值,可以加上一個負數;
4、InterlockedExchange、InterlockedExchangePointer:能夠以原子操作的方式用第二個參數的值來取代第一個參數的值;

一般情況下,在多線程編程中如果對某一個變量的值進行改變的話,使用以上互鎖函數確實比較方便,但有很多時候多線程間會操作更爲複雜的東西
比如對一個結構的賦值、對鏈表的插入與刪除 等等,以上互鎖函數不能滿足要求,所以要使用更爲高級的多線程間的同步技術

 

2.Critical Sections(關鍵代碼段、關鍵區域、臨界區域):

使用方法:
1、初始化:InitializeCriticalSection;
2、刪除:DeleteCriticalSection;
3、進入:EnterCriticalSection(可能造成阻塞);
4、嘗試進入:TryEnterCriticalSection(不會造成阻塞);
5、離開:LeaveCriticalSection;

固有特點(優點+缺點):
1、是一個用戶模式的對象,不是系統核心對象;
2、因爲不是核心對象,所以執行速度快,有效率;
3、因爲不是核心對象,所以不能跨進程使用;
4、可以多次“進入”,但必須多次“退出”;
5、最好不要同時進入或等待多個 Critical Sections,容易造成死鎖;
6、無法檢測到進入到 Critical Sections 裏面的線程當前是否已經退出!

 

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