私がしたいことが名前を持っているかどうかは分かりません。 「マスター/スレーブロックシステム」は、悲しいことに私が思い付く最高の言葉です。私が持っている問題に今種類のマスター/スレーブロックシステム?
...あなたは以下のクラス持っ
を想像:私が望む何
public class Foo
{
public void Master()
{
}
public void Slave1()
{
}
public void Slave2()
{
}
}
をスレーブ方式(スレーブ1、Slave2を)は、多並列に実行することができるということですスレーブメソッドが実行中に実行されるのをブロックされなければならない場合、現在実行されているスレーブメソッドはすべて、マスターメソッドへの入力時に完了まで実行されなければならない。 (コメント付き)このような
何か:
public class Foo
{
public void Master()
{
//block slaves from executing
//wait for slaves to finish
//do code...
//unblock slaves
}
public void Slave1()
{
//if blocked by master wait, if not execute
//if currently running when entering master method, let it finish
}
public void Slave2()
{
//if blocked by master wait, if not execute
//if currently running when entering master method, let it finish
}
}
私はすべての3つの方法ではなく、スレーブ1の方法よりもロックを使用することができます知っているがお互いをブロックし、私が望むものではないthatsのだろう。
public class Foo
{
private readonly object _syncLock = new object();
public void Master()
{
lock (_syncLock) //blocks Slave1, Slave2
{
//run code...
}
}
public void Slave1()
{
lock (_syncLock) //blocks Slave2, Master - dont want that
{
//run code...
}
}
public void Slave2()
{
lock (_syncLock) //blocks Slave1, Master - dont want that
{
//run code...
}
}
}
私は、このクラス内のソリューションを持っていると、「あなたは、それはそれを行います方法のメソッドを呼び出す場合は、」いくつかは、前述の方法は非注文方法でいつでも外に発射することができません希望可能であればそれぞれの方法は複数回実行できます。
あなたが探しているものは、複数のリーダーが1つのライターロックですhttps://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock – prof1990
「ReaderWriterLockSlim'(* Master * = = *書き込み*、*スレーブ* == *読み取り*;読み取り専用または書き込み専用の複数のスレッド)https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim(v=vs.110).aspx –
'ロック ' –