Ich habe keine Ahnung, ob die Sache, die ich machen will, einen Namen hat oder nicht. Das "Master/Slave-Schließsystem" ist leider die beste Formulierung, die ich mir vorstellen konnte.Art von Master/Slave-Schließsystem?
Nun zum Problem Ich habe ...
Stellen Sie sich die folgende Klasse:
public class Foo
{
public void Master()
{
}
public void Slave1()
{
}
public void Slave2()
{
}
}
Was ich wünsche ist, dass die Sklaven Methoden (Slave1, Slave2) parallel in einem mehr laufen kann - Threading-Szenario, aber wenn die Master (Master) -Methode aufgerufen wird, muss die Ausführung der Slaves-Methode während der Ausführung blockiert werden. Zusätzlich sollten alle derzeit laufenden Slave-Methoden bis zum Abschluss der Master-Methode ausgeführt werden.
So etwas wie dies (mit Kommentaren):
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
}
}
Ich weiß, ich Sperre für alle drei Methoden verwenden können, aber als die Slave1 Methoden gegenseitig blockieren und das ist nicht das, was ich will.
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...
}
}
}
Wenn möglich, möchte ich die Lösung innerhalb dieser Klasse haben und nicht etwas außerhalb „wenn Sie die Methoden aufrufen, die Art und Weise sie es tun“, können die genannten Verfahren jederzeit in eine ungeordnete Art und Weise Feuer und jede Methode kann mehrere Male laufen.
was Sie suchen, ist ein mehrere Leser einzelne Schreiber-Sperre https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock – prof1990
Bitte haben Sie einen Blick auf 'ReaderWriterLockSlim' (* Master * = = * Schreiben *, * Slave * == * Lesen *; mehrere Threads zum Lesen oder exklusiven Zugang zum Schreiben) https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim(v=vs.110).aspx –
Haben Sie nur 2 Objekte, die Sie in der ' lock' –