C#線程同步

來源:互聯網
上載者:User

標籤:ram   get   dsp   space   code   moni   number   har   runtime   

通過互鎖來掌握同步的程式設計
using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading;namespace ConsoleApplication1{ class Program { private static char buffer; private static long numberOfUsedSpace = 0; static void Main(string[] args) { Thread writer = new Thread(delegate() { string sentence = "無可奈何花落去,似曾相識燕歸來,小園香徑獨徘徊"; for(int i=0;i<24;i++) { while (Interlocked.Read(ref numberOfUsedSpace) == 1) { Thread.Sleep(10); } buffer = sentence[i]; Interlocked.Increment(ref numberOfUsedSpace); } }); Thread Reader = new Thread(delegate() { for(int i=0;i<24;i++) { while (Interlocked.Read(ref numberOfUsedSpace) == 0) { Thread.Sleep(10); } char ch = buffer; Console.Write(ch); Interlocked.Decrement(ref numberOfUsedSpace); } }); writer.Start(); Reader.Start(); } } }

 學習掌握Lock語句來實現線程的同步

using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading;namespace ConsoleApplication1{    class Program    {        private static char buffer;        private static object lockForBuffer = new object();        static void Main(string[] args)        {            Thread writer = new Thread(delegate()            {                 string sentence = "無可奈何花落去,似曾相識燕歸來,小園香徑獨徘徊";                 for(int i=0;i<24;i++)                 {                        lock(lockForBuffer)                        {                            buffer = sentence[i];                            Monitor.Pulse(lockForBuffer);                            Monitor.Wait(lockForBuffer);                        }                 }              });            Thread Reader = new Thread(delegate()            {                for(int i=0;i<24;i++)                {                    lock (lockForBuffer)                    {                        char ch = buffer;                        Console.Write(ch);                        Monitor.Pulse(lockForBuffer);                        Monitor.Wait(lockForBuffer);                    }                }            });            writer.Start();            Reader.Start();        }                       }       }

 

using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading;namespace ConsoleApplication1{    class Program    {        private static object knife = new object();        private static object fork = new object();        static void Main(string[] args)        {            Thread GirlThread = new Thread(delegate()            {                Console.WriteLine("今天的月亮好美啊");                lock (knife)                {                    GetKnife();                    lock(fork)                    {                        GetFork();                        Eat();                        Console.WriteLine("女孩放下叉子");                        Monitor.Pulse(fork);                    }                    Console.WriteLine("女孩放下刀子");                    Monitor.Pulse(knife);                }              });            GirlThread.Name = "女孩";            Thread BoyThread = new Thread(delegate()            {                Console.WriteLine("\n你更美");                lock (knife)                {                    GetKnife();                    lock (fork)                    {                        GetFork();                        Eat();                        Console.WriteLine("男孩放下叉子");                        Monitor.Pulse(fork);                    }                    Console.WriteLine("南海放下刀子");                    Monitor.Pulse(knife);                }            });            BoyThread.Name = "男孩";            GirlThread.Start();            BoyThread.Start();        }        static void GetKnife() { Console.WriteLine(Thread.CurrentThread.Name+"拿起刀子"); }        static void GetFork() { Console.WriteLine(Thread.CurrentThread.Name + "拿起叉子"); }        static void Eat() { Console.WriteLine(Thread.CurrentThread.Name + "吃東西"); }                       }       }

 

C#線程同步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.