System.SysUtils.TMultiReadExclusiveWriteSynchronizer.BeginWrite

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

function BeginWrite: Boolean;

C++

bool __fastcall BeginWrite();

プロパティ

種類 可視性 ソース ユニット
function public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils TMultiReadExclusiveWriteSynchronizer

説明

スレッドが保護されたメモリに安全に書き込める場合に書き込みを許可します。

BeginWrite メソッドは,複数読み出し/排他的書き込みシンクロナイザによって保護されたメモリに対する排他的な書き込みロックを取得します。BeginWrite メソッドは,保護されたメモリに書き込む前に呼び出す必要があります。BeginWrite メソッドは,メモリの読み出しまたは書き込みを行うほかのスレッドがなくなるまで戻りません。あるスレッドが BeginWrite メソッドを呼び出した後は,保護されたメモリへのアクセスを要求するために BeginRead メソッドまたは BeginWrite メソッドを呼び出すその他すべてのスレッドは,書き込みスレッドが EndWrite メソッドを呼び出すまで待たされます。

書き込みロック操作はアトミック(単一性)は保証されていません。保護されたメモリ内のデータは,BeginWrite メソッドから戻った時点で排他的に参照できることが保証されますが,BeginWrite メソッドを呼び出す前と同じ状態であることは保証されません。複数のスレッドがほぼ同時に BeginWrite を呼び出した場合,必ずしも BeginWrite を呼び出した順番に書き込みロックが与えられるとは限りません。ほかのスレッドが先に書き込み権限を取得し保護されたメモリを書き換える可能性があります。そのため BeginWrite を呼び出す前に保持していた保護されたメモリの内容は必ずしも信用できません。ただし,呼び出し側のスレッドで,BeginWrite の戻り値を調べることで,ほかのスレッドが書き込み権限を取得したかどうかを判別できます。BeginWrite メソッドの戻り値が true の場合,保護されたメモリは別のスレッドによって書き込まれていません。false の場合,保護されたメモリが別のスレッドによって変更されている可能性があります。

関連項目