Sagen wir mal ich hab 1000 Threads 😉
autoResetEvent.WaitOne();
autoResetEvent.Reset();
//blabla
autoResetEvent.Set();
Kann ich mich in dem Fall noch auf AutoResetEvent verlassen?
Ich verstehe nicht ganz, was die Anzahl der Threads mit der Funktionalität des AutoResetEvents zu tun haben soll?
Naja das Problem ergibt sich ja aus dem Zeitraum der zwischen WaitOne und Reset liegt, und je größer die Anzahl der Threads ist desto größer ist auch die Chance, dass einer durchschlüpft.
Zitat MSDN-Lib:
Calling Set signals AutoResetEvent to release a waiting thread. AutoResetEvent remains signaled until a single waiting thread is released, and then automatically returns to the non-signaled state. If no threads are waiting, the state remains signaled indefinitely.
Das bedeutet also, dass nur ein einziger Thread das WaitOne abschließt, alle anderen warten weiter.
Original von ZiMD
Naja das Problem ergibt sich ja aus dem Zeitraum der zwischen WaitOne und Reset liegt, und je größer die Anzahl der Threads ist desto größer ist auch die Chance, dass einer durchschlüpft.
Der Trick beim AutoResetEvent ist, dass es Reset automatisch aufruft 😉
e.f.q.
Aus Falschem folgt Beliebiges
Mir scheint, du willst hier einen geschützten Bereich implementieren. Da tuts dein Code tatsächlich nicht. Verwende Monitor.Enter/Exit.