有幾個規律: 1、假如一個對象(或變量)不會同時被多個其他線程訪問,那么這個對象是不需使用線程同步的。 2、假如雖然有多個線程同時訪問一個對象,但他們所訪問的數據或方法并不相同(不交叉),那這種情況也不需使用線程同步。 例如上例中的那個公司里面假如有 T 和 Q 兩個人,但他們的工資分別是由 A 和 B 主管的,那么這個工資的處理就不需要線程同步了。 3、假如一個對象會同時被多個其他線程訪問,一般只需為這個對象添加線程同步的代碼,而其他線程是不需添加額外代碼的。
public void SendFlower() { Console.WriteLine("正在送花的途中"); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.Write(".."); } Console.WriteLine("/r/n花已經送到MM手中了,boss");
public class TestMain { private static AutoResetEvent ent = new AutoResetEvent(false);
public static void Main() { Boy sender = new Boy(ent);
for (int i = 0; i < 3; i++) { Thread th = new Thread(new ThreadStart(sender.SendFlower)); th.Start(); ent.WaitOne(); //等待工作 Console.WriteLine("收到了吧,花是我送嘀:)/r/n/r/n"); }
Console.ReadLine(); }
}
public class Boy { AutoResetEvent ent;
public Boy(AutoResetEvent e) { ent = e; }
public void SendFlower() { Console.WriteLine("正在送花的途中"); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.Write(".."); } Console.WriteLine("/r/n花已經送到MM手中了,boss");