Ich möchte alle gesperrten Threads freigeben, nachdem einer von ihnen übergeben wurde, und den Task abschließen. Lassen Sie mich einen Beispielcode über das, was ich machen möchte, veröffentlichen. Wichtig ist, dass sie alle zusammen passieren müssen, nachdem der erste Thread seinen Job beendet hat. Sie (Ruhe 99 Fäden) müssen so sein, dass sie nie abgeschlossen haben, nicht eins nach dem anderen.Alle gesperrten Threads freigeben
Monitor.Enter(_lock);//imagine 100x threads hit this lock at same time.
//1 thread pass there
if (data == null)
{
data = GetData();
}
Monitor.Exit(_locker);//one more thread allow after this code.And they all come one by one in order.In these point I want to release them all together.
Ich habe versucht, eine Menge Klasse über wie Monitor-Threading, Mutex, Semaphore, ReadWriteLock, ManaualResetEvent etc., aber ich habe es nicht geschafft, dies zu tun, kommen sie alle eins nach dem anderen. Hast du das jemals getan? Oder hast du eine Ameisen Idee? Ich möchte nicht mehr Zeit damit verbringen.
Dieser Code hat bei jedem Aufrufer den kritischen Abschnitt ausgeführt, nachdem der CTS abgebrochen wurde. – Servy
@Servy ist das nicht genau das, wonach das OP gefragt hat? – Daneau
Der Wert muss * genau einmal * erstellt werden. – Servy