多線程編程,有時希望每個線程的數(shù)據(jù)相互隔離互不影響,有時卻希望線程間能共享數(shù)據(jù),并保持同步。本篇體驗多線程共享和不共享數(shù)據(jù)。
□ 多線程不共享數(shù)據(jù)
對于多線程,CLR到底是怎樣為它們分配內(nèi)存棧空間呢?是"一個蘿卜一個坑",每個線程都有自己的棧空間;還是"大樹底下好乘涼",所有的線程共享同一個棧空間?
我們讓2個線程執(zhí)行相同的靜態(tài)方法,用到相同的變量,通過打印變量來求證多線程棧空間的分配情況。
class PRogram{static void Main(string[] args){new Thread(SayHi).Start();SayHi();}static void SayHi(){for (int i = 0; i < 5; i++){Console.WriteLine("我是線程#" + Thread.CurrentThread.ManagedThreadId + "這是我的第" +i+ "次說hello");}}}

雖然2個線程交叉執(zhí)行,但都說了4次的hello。說明CLR為2個線程都分配了棧空間,變量i在各自的棧空間中相互不受影響。

□ 多線程共享數(shù)據(jù)
線程間是需要相互合作的,多個線程如何共享數(shù)據(jù)呢?
※ 共享實例變量
讓2個線程執(zhí)行同一個實例方法,看看是否可以共享對象實例的公共字段。
using System;using System.Threading;namespace Consoleapplication1{class Program{public int whatever;static void Main(string[] args){Program p = new Program();new Thread(p.PrintVariable).Start();p.PrintVariable();}void PrintVariable(){whatever++;
新聞熱點
疑難解答