国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

有趣的多線程編程(4)——死鎖

2024-07-21 02:29:40
字體:
供稿:網(wǎng)友

// deadlocksample.cs
// 分析一下為什么會發(fā)生死鎖?

using system;using system.threading;public class test{    static readonly object firstlock = new object();    static readonly object secondlock = new object();        static void main()    {        new thread(new threadstart(threadjob)).start();                // wait until we're fairly sure the other thread        // has grabbed firstlock        thread.sleep(500);                console.writeline ("locking secondlock");        lock (secondlock)        {            console.writeline ("locked secondlock");            console.writeline ("locking firstlock");            lock (firstlock)            {                console.writeline ("locked firstlock");            }            console.writeline ("released firstlock");        }        console.writeline("released secondlock");    }        static void threadjob()    {        console.writeline ("/t/t/t/tlocking firstlock");        lock (firstlock)        {            console.writeline("/t/t/t/tlocked firstlock");            // wait until we're fairly sure the first thread            // has grabbed secondlock            thread.sleep(1000);            console.writeline("/t/t/t/tlocking secondlock");            lock (secondlock)            {                console.writeline("/t/t/t/tlocked secondlock");            }            console.writeline ("/t/t/t/treleased secondlock");        }        console.writeline("/t/t/t/treleased firstlock");    }}
locking firstlock
locked firstlock
locking secondlock
locked secondlock
locking firstlock locking secondlock

因應(yīng)之道,使用queue和monitor:

//queuemonitorthread.cs

using system;using system.collections;using system.threading;public class test{    static producerconsumer queue;        static void main()    {        queue = new producerconsumer();        new thread(new threadstart(consumerjob)).start();                random rng = new random(0);        for (int i=0; i < 10; i++)        {            console.writeline ("producing {0}", i);            queue.produce(i);            thread.sleep(rng.next(1000));        }    }        static void consumerjob()    {        // make sure we get a different random seed from the        // first thread        random rng = new random(1);        // we happen to know we've only got 10         // items to receive        for (int i=0; i < 10; i++)        {            object o = queue.consume();            console.writeline ("/t/t/t/tconsuming {0}", o);            thread.sleep(rng.next(1000));        }    }}public class producerconsumer{    readonly object listlock = new object();    queue queue = new queue();    public void produce(object o)    {        lock (listlock)        {            queue.enqueue(o);            if (queue.count==1)            {                monitor.pulse(listlock);            }        }    }        public object consume()    {        lock (listlock)        {            while (queue.count==0)            {                monitor.wait(listlock);            }            return queue.dequeue();        }    }}
producing 0 consuming 0
producing 1 consuming 1
producing 2 consuming 2
producing 3 consuming 3
producing 4
producing 5 consuming 4
producing 6 consuming 5
                                         consuming 6
producing 7 consuming 7
producing 8 consuming 8
producing 9 consuming 9
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 营口市| 长寿区| 阜新| 武冈市| 诸暨市| 出国| 莱阳市| 汝南县| 措美县| 虞城县| 邢台县| 丰台区| 天台县| 奉贤区| 福建省| 珲春市| 开远市| 元氏县| 年辖:市辖区| 蓝田县| 南陵县| 光山县| 景东| 台东县| 青龙| 佛学| 安乡县| 凤凰县| 宜兰县| 陆河县| 中江县| 宁河县| 凤冈县| 盐山县| 井冈山市| 揭东县| 青岛市| 宁陵县| 崇州市| 抚顺县| 英山县|