国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 张北县| 长沙县| 山东| 游戏| 永清县| 西充县| 上饶市| 肃宁县| 阿克陶县| 甘德县| 信丰县| 禹州市| 黔西县| 长垣县| 马鞍山市| 荆州市| 仪征市| 宝山区| 尉犁县| 宣汉县| 扶余县| 阆中市| 岫岩| 江山市| 昆明市| 霸州市| 肇源县| 汝南县| 蓬安县| 合水县| 吉木萨尔县| 安丘市| 灵石县| 屏边| 华蓥市| 开封市| 商都县| 英吉沙县| 婺源县| 潮州市| 贵州省|