- PR -

ASP.NET C# で synchronized

投稿者投稿内容
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-05-24 09:37
引用:

ボルビさんの書き込み (2007-05-23 20:01) より:
まずはlockがsynchronizedと同じ動きができるかの確認した
かったので、


Javaでもsynchronized(this)は、同じ意味です。
Servletなんかは基本シングルインスタンスなので、thisで事足りるでしょうが。
ボルビ
ベテラン
会議室デビュー日: 2007/05/23
投稿数: 52
投稿日時: 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)にはアクセスすることはないので
書いてくれたコードで問題ないと思うんですけど・・・。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-05-24 12:57
すみませんが、排他処理したい理由がまだわかりません。
mio さんも触れていますが、ASP.NET はリクエストの度に Page クラスのインスタンスが作成されます。
なので、lock(this) とした場合、this はそれぞれのリクエストで別物なので、ロックしても意味がないという事です。
普通は、排他処理したいリソースが何かあるから lock するはずなのですが、WebForm.aspx.cs 内の処理を単に排他したいというだけならば、私の書いたコードで大丈夫だと思います。
_________________
囚人のジレンマな日々
ボルビ
ベテラン
会議室デビュー日: 2007/05/23
投稿数: 52
投稿日時: 2007-05-24 14:15
引用:

囚人さんの書き込み (2007-05-24 12:57) より:
WebForm.aspx.cs 内の処理を単に排他したいというだけならば、私の書いたコードで大丈夫だと思います。


まさしくそのとおりです、説明が旨くできなくてすいませんでした。
試した結果うまく動いているので、書いていただいたコードを使わせてもらいます。
有難う御座いました。

スキルアップ/キャリアアップ(JOB@IT)