WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院软件开发C语言 C#多线程编程(2):线程的同步 阅读

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

 2010-09-30 21:09:36 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劕鎼痪褔鏌曟繝蹇曠窗闁煎壊浜滈—鍐偓锝庡墮娴犙勭箾閸喎鐏ユい鏇樺劦椤㈡瑩鎮℃惔銇帮拷
核心提示:线程不同步引出的问题下面做一个假设,假设有100张票,C#多线程编程(2):线程的同步,由两个线程来实现一个售票程序,每次线程运行时首先检查是否还有票未售出,如果有就按照票号从小到大的顺序售出票号最小的票,程序的代码如下:usingSystem;usingSystem.Collections.Generic;using

线程不同步引出的问题

下面做一个假设,假设有100张票,由两个线程来实现一个售票程序,每次线程运行时首先检查是否还有票未售出,如果有就按照票号从小到大的顺序售出票号最小的票,程序的代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace StartThread
{
        public class ThreadLock
        {
                private Thread threadOne;
                private Thread threadTwo;
                private List<string> ticketList;
                private object objLock = new object();
                public ThreadLock()
                {
                        threadOne = new Thread(new ThreadStart(Run));
                        threadOne.Name = "Thread_1";
                        threadTwo = new Thread(new ThreadStart(Run));
                        threadTwo.Name = "Thread_2";
                }
                public void Start()
                {
                        ticketList = new List<string>(100);
                        for (int i = 1; i <= 100; i++)
                        {
                                ticketList.Add(i.ToString().PadLeft(3,'0'));//实现3位的票号,如果不足3位数,则以0补足3位
                        }
                        threadOne.Start();
                        threadTwo.Start();
                }
                private void Run()
                {
                        while (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  下一页

Tags:线程 编程 线程

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