我自己還不是很明白
,但是我腦海裡初戀了兩個小人
,第乙個小人說
,別老是停留在自己會的那個階段
,有時候稍微搞搞你不明白的東西對你來說是一種進步
,第二個小人說
:」第乙個小人說得對啊」
mutex就像乙個
c#lock一樣,
不同的是它可以跨程序
.
進入和釋放乙個mutex
要花費幾毫秒
,大約比c#的
lock慢50
倍.
使用乙個mutex
的實力,
呼叫waitone
方法來獲取鎖
,releasemutex
方法來釋放鎖
.
因為mutex
是跨程序的
,所以我們可以使用
mutex
來測試程式是否已經執行
.
public static void mainthread()
runprogram();}}
乙個semaphore就像乙個酒吧一樣
,通過門衛來限制它的客人
,一旦達到限制
,沒有人可以進入
.
人們會乖乖的排隊,
一旦有乙個人離開了酒吧
,排隊中的人就可以進入乙個人了
. 案例:
class theclub
}static void enter(object id)
}
你如果有心的話,
我不用貼完整**
,你也會自己慢慢地一步一步的把這個案例測試完
.我說話挺狠啊
,我朋友都說我臉上這麼多痘痘就是因為我嘴太毒了
...乙個autoresetevent
就像十字轉門一樣
,插入一張票就讓乙個人通過
,」auto」代表門會自動關上.
在十字門外的人可以呼叫waitone
方法來阻塞,等待
.一旦有人插入了票(呼叫
set方法
),就可以讓外面等待的人(呼叫
waitone)
通過了.
建立autoresetevent
有乙個引數.
static eventwaithandle _waithandle = new autoresetevent(false);
其中false
在msdn
裡的解釋為
:初始狀態為非終止.
其實這個false
代表了十字轉門沒有壞
,可以進人
,讓人等待.
而如果是true的話,
初始狀態為終止
,也就是代表已經呼叫
set了
,就是說十字轉門壞了
,所以接下來如果有人呼叫了
waitone方法,
這個呼叫
waitone
方法的人直接可以進入了
,不需要再插入票
(不需要再呼叫
set)了,
之後的呼叫和
false一致,
這一點可以認為
autoresetevent
具有記憶功能
,他記住了上次門是開啟的狀態
.所以呼叫
waitone
方法可以進入.案例
:
class threadautoresetevent
static void waiter()
}
分析:很簡單啊
,waiter
執行到waiting...後,
就開始呼叫
waitone了,
所以在門外排隊等待.
而主線程在睡了兩秒後,
開始插入了一張票,所以
waiter
就繼續執行了
,所以列印
notified. **如下:
接下來我們使用autoresetevent
來模擬實現生產消費問題:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading;
using system.threading.tasks;
namespace mutex的案例
}console.read();}}
class producerconsumerqueue : idisposable
public void enqueuetask(string task)
_wh.set();//一旦有任務了,喚醒等待的執行緒.
}public void dispose()
void work()
}if (task!=null)//如果有任務的話,執行任務
else//否則阻塞}}}}}
說實話,
這段**我並不是很理解
,可以說不懂
,如果一偶高手能給我指點一二
,在下感激不盡
!乙個manuresetevent
就是乙個普通門,呼叫
set方法門就開了
,允許任何人進入,呼叫
waitone
方法就開始等待進入.呼叫
reset
方法就關門了
.在乙個關閉的門上呼叫
wasitone
方法就會被阻塞
.當門下次被開啟的時候
,所有等待的執行緒都可以進入了
.除了這些不同以外,乙個
manualresetevent
和autoresetevent
類似.
在.net 4
中,manualresetevent
提供了乙個優化版本
.manualreseteventslim.
優化版本有哪些好處不用我說了吧?
小小的結一下
本次內容主要講解了一點同步構造的內容,
說實話,
我看起來已經很吃力了
,但是沒辦法
,誰讓咱頭皮硬呢
,當然其他地方也硬!
深入淺出多執行緒系列之五 一些同步構造 上篇
1 mutex mutex 就像乙個 c lock 一樣,不同的是它可以跨程序.進入和釋放乙個 mutex 要花費幾毫秒,大約比c 的 lock慢50 倍。使用乙個 mutex 的例項,呼叫 waitone 方法來獲取鎖,releasemutex 方法來釋放鎖。因為mutex是跨程序的,所以我們可以...
深入淺出多執行緒系列之五 一些同步構造 上篇
1 mutex mutex 就像乙個 c lock 一樣,不同的是它可以跨程序.進入和釋放乙個 mutex 要花費幾毫秒,大約比c 的 lock慢50 倍。使用乙個 mutex 的例項,呼叫 waitone 方法來獲取鎖,releasemutex 方法來釋放鎖。因為mutex是跨程序的,所以我們可以...
物件的構造 上
類是一種特殊的自定義型別,自定義型別遵守c語言中所有資料型別的操作,也可以用來定義指標,這種特殊的自定義類可以用來定義變數,從物件導向的角度就是例項化乙個物件了,從程式的本質上來將就是定義乙個自定義型別的變數,既然是變數它就需要占用儲存空間,占用什麼區域的儲存空間和c語言中的說法一致,即區域性變數在...