WEB开发网
开发学院软件开发C语言 C#多线程编程(2):线程的同步 阅读

C#多线程编程(2):线程的同步

 2010-09-30 21:09:36 来源:WEB开发网   
核心提示: usingSystem;usingSystem.Collections.Generic;usingSystem.Text;//需要添加对System.EnterpriseServices.dll这个类库的引用采用使用这个dllusingSystem.EnterpriseServices;name

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);
                                }
                        }
        }
}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:线程 编程 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接