la programación multi-hilo de clase Learning Series --AutoResetEvent

Ejemplo de código

//
private static AutoResetEvent _workerEvent = new AutoResetEvent(false);
private static AutoResetEvent _mainEvent = new AutoResetEvent(false);

static void Process(int seconds)
{
    //输出顺序:2
    Console.WriteLine("Starting a long running work...");
    Thread.Sleep(TimeSpan.FromSeconds(seconds));
    //输出顺序:3
    Console.WriteLine("Work is done!");
    //发送信号,通知线程可以继续
    _workerEvent.Set();
    //输出顺序:4
    Console.WriteLine("Waiting for a main thread to complete its work");
    //阻止当前线程,直到接受到信号
    _mainEvent.WaitOne();
    //输出顺序:8
    Console.WriteLine("Starting second opreation...");
    Thread.Sleep(TimeSpan.FromSeconds(seconds));
    //输出顺序:9
    Console.WriteLine("Work is done");
    //发送信号,通知线程可以继续
    _workerEvent.Set();
}

static void Main(string[] args)
{
    //开启一个线程
    var t  = new Thread(() => Process(10));
    t.Start();
    //输出顺序:1
    Console.WriteLine("Waiting for another thread to complete work");
    //阻止当前线程,直到接受到信号
    _workerEvent.WaitOne();
    //输出顺序:5
    Console.WriteLine("First opreation is completed!");
    //输出顺序:6
    Console.WriteLine("Performing an operation on a main thread");
    Thread.Sleep(TimeSpan.FromSeconds(5));
    //发送信号,通知线程可以继续
    _mainEvent.Set();
    //输出顺序:7
    Console.WriteLine("Now running the second operation on a second thread");
    //阻止当前线程,直到接受到信号
    _workerEvent.WaitOne();
    //输出顺序:10
    Console.WriteLine("Second opreation is completed!");
    Console.ReadKey();
}

Los resultados
Aquí Insertar imagen Descripción
principales
Define ejemplo dos AutoResetEvent, un hilo niño está enviando una señal a la rosca principal, el hilo principal es un hilo envía una señal al niño, la falsa pase constructor, el estado inicial es unsignaled, lo que significa que cualquier hilo dos objetos llama WaitOne métodos bloquearán el hilo hasta que llamamos al método Set. Si al principio nos define como true, entonces el hilo llamadas WaitOne será procesada inmediatamente, el estado se convierte unsignaled, necesidad de re-establece de modo que otros hilos. Luego creamos dos hilos, se llevará a cabo la primera operación durante 10 segundos, a continuación, esperar a que la señal enviada desde el segundo hilo, medios de esta señal de que la primera operación se ha completado. Ahora, el segundo hilo está esperando que el hilo principal de la señal, que hacemos un trabajo adicional en el hilo principal, y llamando _mainEvent.Set (); señales, y luego esperar a un segundo hilo envía otra señal.

AutoResetEvent tiempo se utiliza en modo de núcleo, así que la espera no es demasiado largo.

Publicado 37 artículos originales · ganado elogios 3 · Vistas 6329

Supongo que te gusta

Origin blog.csdn.net/huan13479195089/article/details/88955291
Recomendado
Clasificación