大佬教程收集整理的这篇文章主要介绍了c# – 线程同步打印字符串,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我写的内容似乎工作正常,但在我看来它是写的
非常老式的方式:
public class Example { private static @R_450_3867@ = 10; private static int i = 0; private static bool isOneActive = false; private static void Run1(object o) { String s = o as String; while(true) { if (!isOneActivE) { Console.WriteLine("Hello from thread number: " + Thread.CurrentThread.ManagedThreadId + " -> " + s); isOneActive = true; if (i++ > count) break; } } } private static void Run2(object o) { String s = o as String; while(true) { if (isOneActivE) { Console.WriteLine("Hello from thread number: " + Thread.CurrentThread.ManagedThreadId + " -> " + s); isOneActive = false; if (i++ > count) break; } } } static void Main() { Thread t1 = new Thread(Run1); Thread t2 = new Thread(Run2); t1.Start("x"); t2.Start("+"); }
我知道现在.NET有许多用于线程同步的工具,例如ManualResetEvent类和Task库.那么我们如何使用ManualResetEvent类编写相同的程序呢?有可能吗?
更好的方法是使用@L_675_11@中提到的Waithandles.
public class Example { private static @R_450_3867@ = 10; private static int i = 0; private static AutoResetEvent firstEvent = new AutoResetEvent(true); private static AutoResetEvent secondEvent = new AutoResetEvent(false); private static void Run1(object o) { String s = o as String; while (true) { firstEvent.WaitOne(); Console.WriteLine("Hello from thread number: " + Thread.CurrentThread.ManagedThreadId + " -> " + s); secondEvent.Set(); if (Interlocked.Increment(ref i) > count) break; } } private static void Run2(object o) { String s = o as String; while (true) { secondEvent.WaitOne(); Console.WriteLine("Hello from thread number: " + Thread.CurrentThread.ManagedThreadId + " -> " + s); firstEvent.Set(); if (Interlocked.Increment(ref i) > count) break; } } static void Main() { Thread t1 = new Thread(Run1); Thread t2 = new Thread(Run2); t1.Start("x"); t2.Start("+"); } }
请注意,firstEvent是在initialState标志设置为true的情况下实例化的,这意味着第一个线程最初不会等待.
以上是大佬教程为你收集整理的c# – 线程同步打印字符串全部内容,希望文章能够帮你解决c# – 线程同步打印字符串所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。