- - PR -
ASP.NET C# で synchronized
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-24 09:37
Javaでもsynchronized(this)は、同じ意味です。 Servletなんかは基本シングルインスタンスなので、thisで事足りるでしょうが。 | ||||||||
|
投稿日時: 2007-05-24 11:09
.NETだとファイル(****.aspx ****.aspx.cs)になると思うんですが、 JavaでいうServletの処理を排他(synchronized)したいということです。 Java---- index.xslの<img>タグからサーブレットが呼ばれて, まずはt1のグラフが表示されt2は待機状態、t1処理終了後t2の処理が 動くといったものを.NETで実現したい。 <img alt="t1" src="../servlet/indexServlet" /> → indexServlet.javaのdoGet()でsynchronized (this){グラフ作成} <br /> <img alt="t2" src="../servlet/indexServlet" /> → t1の処理が終わったら呼ばれる なので下記のような記述でいけるんだろうと考えていたんですが、旨くいかなくて・・。 .NET---- index.aspx <img alt="t1" src="WebForm.aspx" /> → WebForm.aspx.csのPage_Loadでlock(this){グラフ作成} <br /> <img alt="t2" src="WebForm.aspx" /> → t1の処理が終わったら呼ばれる
他のページからはファイルWebForm.aspx)にはアクセスすることはないので 書いてくれたコードで問題ないと思うんですけど・・・。 | ||||||||
|
投稿日時: 2007-05-24 12:57
すみませんが、排他処理したい理由がまだわかりません。
mio さんも触れていますが、ASP.NET はリクエストの度に Page クラスのインスタンスが作成されます。 なので、lock(this) とした場合、this はそれぞれのリクエストで別物なので、ロックしても意味がないという事です。 普通は、排他処理したいリソースが何かあるから lock するはずなのですが、WebForm.aspx.cs 内の処理を単に排他したいというだけならば、私の書いたコードで大丈夫だと思います。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2007-05-24 14:15
まさしくそのとおりです、説明が旨くできなくてすいませんでした。 試した結果うまく動いているので、書いていただいたコードを使わせてもらいます。 有難う御座いました。 |