Synchronisation von zwei threads mit AutoResetEvent
Ich versuche, umzusetzen AutoResetEvent
. Für den Zweck verwende ich eine sehr einfache Klasse :
public class MyThreadTest
{
static readonly AutoResetEvent thread1Step = new AutoResetEvent(false);
static readonly AutoResetEvent thread2Step = new AutoResetEvent(false);
void DisplayThread1()
{
while (true)
{
Console.WriteLine("Display Thread 1");
Thread.Sleep(1000);
thread1Step.Set();
thread2Step.WaitOne();
}
}
void DisplayThread2()
{
while (true)
{
Console.WriteLine("Display Thread 2");
Thread.Sleep(1000);
thread2Step.Set();
thread1Step.WaitOne();
}
}
void CreateThreads()
{
//construct two threads for our demonstration;
Thread thread1 = new Thread(new ThreadStart(DisplayThread1));
Thread thread2 = new Thread(new ThreadStart(DisplayThread2));
//start them
thread1.Start();
thread2.Start();
}
public static void Main()
{
MyThreadTest StartMultiThreads = new MyThreadTest();
StartMultiThreads.CreateThreads();
}
}
Aber das wird nicht funktionieren. Th-Nutzung scheinen sehr direkt, also ich würde schätzen, wenn jemand in der Lage ist, mir zu zeigen, was ist falsch und wo ist das problem mit der Logik, die ich umsetzen hier.
- Wie ist es nicht? Was passiert?
- Auch der code, den Sie gegeben haben, nicht selbst kompilieren - Sie habe nie erklärt
_stopThreads
... - Jon Skeet ich nur den code ändern um das problem zu isolieren, der nun behoben ist.
- Ich will synchronisierten aufrufen ist es aber nicht.
- Was erwartest du, was passiert?
- Es funktioniert auf meinem PC. Was die synchronisation, die Sie erreichen wollen zwischen threads?
- Dein code scheint sicher, dass beide threads schreiben einer Konsole-Nachricht in ungefähr der gleichen Zeit. Was wollen Sie, es zu tun?
- Ciura will ich sehen
Display Thread 1
,Display Thread 2
,Display Thread 1
-, Anzeige-Thread 2, und so weiter, ohne änderung der Reihenfolge, wieDisplay Thread 1
,Display Thread 1
oderDisplay Thread 2
,Display Thread 2
. - In anderen Worten: ich möchte um die Reihenfolge der Ausführung 1-2-1-2-1-2 und so, nicht wie jetzt mit 1-2-1-2-2-1-1-2...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Frage ist nicht ganz klar, aber ich vermute, Sie erwarten es, um anzuzeigen, 1,2,1,2...
Dann versuchen Sie dies: