- - PR -
VBにも.NetでThreadingがやってきた
1
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-03-05 21:35
C#入門最終回でThreadingが出てきましたね、C++でThreadingしまくりだった私としては、.NetでThreadingがらみがどう変わるのか興味大でした。(そこまでさわれる時間も取れずにいましたが)
私は、C++の時は、こんなクラスをロックに多用していました。
コンストラクタ、デストラクタにロック アンロックを結びつける事でスコープがロック範囲を示すという方法です。 C#入門に出てきたlockはC#の言語仕様の一部の様ですが、Lockは何らかのインターフェースを叩いてくれる物なんでしょうかね?(System.Threadingでは見つかりませんでしたが) でないとSingle Writer Multi Readerモデルとか、Semaphoreとかを実現するのは結構つらいなぁ…等と思いました。 オブジェクト全体をロックしてしまうのはロック競合とかでパフォーマンスをかなりロスしそうな気もしますし、(かといって細かいロックを作るとデッドロックしたりするのですが) ちょっと確認したところではWebService等はマルチスレッドで実行されているようなので、グローバル変数などは確実に競合問題を抱えそうな気もします。 特に、VBプログラマが入ってくると「Threading?なにそれ?」になりそうで… こういうThreading問題まで含めた.NetでのWebアプリケーションの設計に関する情報ってどっかに有りますかね? | ||||||||||||||||||||
|
投稿日時: 2002-03-06 01:47
C#のlockは、System.Threading.Monitorを使います。たとえばこんなのは、
こんな風に展開されます。
System.Threading.ReaderWriterLockがありますよ。
.NET Frameworkでスレッドを扱うときにもっとも重要なのは、Delegateだと思います。Delegateはスレッディングを隠蔽するので、VBプログラマもその使い方だけ正しく知っておけば、基本的には問題ないかと。 スレッディングはいずれにしろデッドロックと背中合わせなので、慎重に使うかどうかの判断をしなければならない、ということには賛成です。が、.NET Frameworkはそういったことも含めて面倒を見てくれる「フレームワーク」なので、ほとんどの場合は、フレームワークに任せるのが王道だろうと思います。 [ メッセージ編集済み 編集者: NothingBut.NETFX 編集日時 2002-03-06 14:13 ] | ||||||||||||||||||||
|
投稿日時: 2002-03-07 17:50
System.Threading.Monitorですか…うみゅ、いよいよわからなくなった。
こいつ、Sealedですよね、ロック処理を置き換えることでThreadingポリシーを適用するわけではないんですかね… あるオブジェクトが Single Writer Multi ReaderのThreadingポリシーを持つ場合… もしや、C#のlockそのものが使えないのか?
実際には個数を取ってロックから出てしまっては個数が当てにならなくなるのでこんなに簡単な設計にはならないはずなのですが、これぐらいで言語の一部が破綻しないで欲しいなぁ。 しかし、DelegateがThreadingを隠蔽するというのは知りませんでした。 ということは Delegateを通る時にThread境界を渡る事がある(できる)という事でしょうか???、いよいよよく判らなくなってきました。 もうちょっと色々試さないと判らないですね、基本はフレームワークに隠蔽して貰って気にせずに使うのが一番なんですが、いざアクセスの激しいWebServiceなんかを作ると突然デッドロックしたり、予定していたパフォーマンスが出なかったり、いろいろ起こりそうな気がしてきました。 | ||||||||||||||||||||
|
投稿日時: 2002-03-07 20:18
すみません、取り急ぎ。
もうお分かりと思いますが、lockはC#のシンタックスシュガーにすぎません。スレッディング機構のようなものではないと思います。 むしろdelegateのほうがフレームワークのスレッディング機構に近いのではないかと。 |
1