2008-07-06 今日は LINQ 勉強会 第3回
lock ステートメント
C# の lock ステートメントは System.Threading.Monitor クラスの Enter(object)/Exsit(object) メソッドと try - finally ステートメントに展開される。
lock(requestQueue) { requestQueue.Enqueue("WorkItem"); }
は展開されると以下のようになる。
Monitor.Enter(requestQueue); try { requestQueue.Enqueue("WorkItem"); } finally { Monitor.Exit(requestQueue); }
ちなみに MSDN の Monitor.Exit(object) メソッドに気になる記述が。。。
ロックが解放されて、他のスレッドがオブジェクトの実行待ちキューに入ると、それらのスレッドの 1 つがロックを取得します。ロックを取得するために待機キュー内で待機している他のスレッドは、ロックの所有者が Exit を呼び出しても、実行待ちキューに自動で移動しません。1 つ以上の待機中のスレッドを実行待ちキューに移動するには、Exit を呼び出す前に、Pulse または PulseAll を呼び出します。
What's? マジですか?
今抱えている問題もどうやらあたりが原因で起きているのかも。。。
トラックバック - http://d.hatena.ne.jp/chegue/20080706/1215313067
リンク元
- 37 http://www.archway.co.jp/Home/okuda.aspx
- 15 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLG,GGLG:2005-32,GGLG:ja&q=NorthWindDataContext
- 5 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=SQL+Server+sp_executesql+注意点&num=50
- 4 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rlz=1T4GZHZ_jaJP233JP233&q=lock+ステートメント
- 3 http://d.hatena.ne.jp/keyword/C#
- 2 http://209.85.175.104/search?q=cache:7Y_4fpWG_vEJ:d.hatena.ne.jp/chegue/20071128/1196227045+VisualStudio アンインストール 完全&hl=ja&ct=clnk&cd=26&gl=jp&lr=lang_ja&clien
- 2 http://72.14.235.104/search?q=cache:7Y_4fpWG_vEJ:d.hatena.ne.jp/chegue/20071128/1196227045+msdn+library+2008+beta+compact+framework+3.5+pre-release&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja&client=firefox-a
- 2 http://b.hatena.ne.jp/westlife/Deep Copy/
- 2 http://okyuu.com/ja/blogs
- 2 http://r.hatena.ne.jp/keyword/deep copy
