C#多线程编程(2):线程的同步
2010-09-30 21:09:36 来源:WEB开发网using System;
using System.Collections.Generic;
using System.Text;
//需要添加对System.EnterpriseServices.dll这个类库的引用采用使用这个dll
using System.EnterpriseServices;
namespace StartThread
{
[Synchronization(SynchronizationOption.Required)]//确保创建的对象已经同步
public class SynchronizationAttributeClass
{
public void Run()
{
}
}
}
所有在同一个上下文域的对象共享同一个锁。这样创建的对象实例属性、方法和字段就具有线程安全性,需要注意的是类的静态字段、属性和方法是不具有线程安全性的。
同步代码区
同步代码区是另外一种策略,它是针对特定部分代码进行同步的一种方法。
lock同步
针对上面的代码,要实现不会出现混乱(两次卖出同一张票或者有些票根本就没有卖出),可以lock关键字来实现,出现问题的部分就是在于判断剩余票数是否大于0,如果大于0则从当前总票数中减去最大的一张票,因此可以对这部分进行处理,代码如下:
private void Run()
{
while (ticketList.Count > 0)//①
{
lock (objLock)
{
if (ticketList.Count > 0)
{
string ticketNo = ticketList[0];//②
Console.WriteLine("{0}:售出一张票,票号:{1}", Thread.CurrentThread.Name, ticketNo);
ticketList.RemoveAt(0);//③
Thread.Sleep(1);
}
}
}
}
更多精彩
赞助商链接