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, wie Display Thread 1,Display Thread 1 oder Display 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...

InformationsquelleAutor Leron | 2013-01-23
Schreibe einen Kommentar