ロック
C#にはlockキーワードがあり、これで共有リソースをロックすることができる。排他制御ということですな。その他にも.NET Frameworkに排他制御の方法がある。
using System.Threading;
private ReaderWriterLock rwl = new ReaderWriterLock();
private int num;
private void ReadMethod()
{
// 読み取りロック開始
parent.rwl.AcquireReaderLock(Timeout.Infinite);
try
{
// 共有リソース読み取り処理
System.Diagnostics.Trace.WriteLine("Number:" + num);
}
finally
{
// 読み取りロック解放
parent.rwl.ReleaseReaderLock();
}
}
private void WriteMethod()
{
// 書き込みロック開始
parent.rwl.AcquireWriterLock(Timeout.Infinite);
try
{
// 共有リソース書き込み処理
num++;
}
finally
{
// 書き込みロック解放
parent.rwl.ReleaseWriterLock();
}
}
実際に私は2つのスレッド間で共有するリソースへのアクセス制御のためにこのReaderWriterLockを使用したが、排他制御だから体感的に遅く感じるのは仕方がないか。ま、こういうのもありますよってことで。
Comments