[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/01 19:54 / Filesize : 272 KB / Number-of Response : 1014
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part91



495 名前:デフォルトの名無しさん mailto:sage [2016/12/11(日) 10:51:04.21 ID:rgeKQ1h1.net]
質問させてください。
Microsoft Press の「プログラミング.NET Framework 第2版」という本に、下記の記述があるのですが、

【【【【【引用ここから】】】】】
internal sealed class Transaction {
 private DateTime timeOfLastTransaction; // 最後にトランザクションが行われた時間を記録するフィールド

 public void PerformTransaction() {
  Monitor.Enter(this); // thisオブジェクトのロックを取得
  // トランザクションを実施...

  timeOfLastTransaction = DateTime.Now; // 直前のトランザクションの時間を記録
  Monitor.Exit(this); // thisオフジエクトのロックを開放
 }

 public DateTime LastTransaction { // 最後にトランザクションが行われた時間を返す読み取り専用プロパティ
  get {
   Monitor.Enter(this); // thisオブジ工クトのロックを取得
   DateTime dt = timeOfLastTransaction; // 最近のトランザクションの時間を一時変数に保存
   Monitor.Exit(this); // thisオブジェク卜のロックを開放
   return dt; // 保存された日時を返す
  }
 }
}
【【【【【中略】】】】】
プロパティの実装でEnterとExitと一時変数dtが必要なことに注意してください。
破壊されている可能性のある値を返さないようにするために、これが重要です。
あるスレッドがPerformTransactionを呼び出している問に別のスレッドがプロパティにアクセスすると、これが起こりえます。
【【【【【引用ここまで】】】】】

Monitorでロックをしてるのに、なぜ「あるスレッドがPerformTransactionを呼び出している問に別のスレッドがプロパティに
アクセスする」ことがありえるのでしょうか?






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<272KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef