技术开发 频道

.NET线程同步的多种实现

  2Interlocked

  为多线程提供原子操作。

  在大多数计算机上,增加变量操作不是一个原子操作,需要执行下列步骤:

  1、将实例变量中的值加载到寄存器中。

  2、增加或减少该值。

  3、在实例变量中存储该值。(来自MSDN)

  原子操作保证了在执行以上三步操作期间不会有其他线程改变变量的值。

  上面代码的 Interlocked实现

class Program

  {

  
private static int Flag = 0;

  static void Main(
string[] args)

  {

  CompareExchange();

  }

  static void CompareExchange()

  {

  
for (int i = 0; i < 4; i++)

  {

  Thread tr
= new Thread(doing);

  tr.Start(i);

  }

  Console.Read();

  }

  static void doing(
object threadName)

  {

  
//判断Flag值为0则线程可以进入。

  
while (Interlocked.CompareExchange(ref Flag, 1, 0) != 0)

  {

  Thread.Sleep(
500);

  }

  
int i = 0;

  
while (i < 10)

  {

  Thread.Sleep(
100);

  Console.WriteLine(threadName
+ " " + i++);

  }

  Console.WriteLine(threadName
+ "over ");

  
//还原Flag值为0

  Interlocked.CompareExchange(ref Flag,
0, 1);

  }

  }

0
相关文章