C#多線程同步—使用Semaphore類

來源:互聯網
上載者:User
   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Text;

   5: using System.Threading;

   6: using System.Diagnostics;

   7:  

   8: namespace Semaphore

   9: {

  10:     class Program

  11:     {

  12:         static void Main(string[] args)

  13:         {

  14:             int threadCount = 6;

  15:             int semaphoreCount = 4;

  16:             var semaphore = new SemaphoreSlim(semaphoreCount,semaphoreCount);

  17:             var threads = new Thread[threadCount];

  18:  

  19:             for (int i = 0; i < threadCount;i++ )

  20:             {

  21:                 threads[i] = new Thread(ThreadMain);

  22:                 threads[i].Start(semaphore);

  23:             }

  24:  

  25:             for (int i = 0; i < threadCount;i++ )

  26:             {

  27:                 threads[i].Join();

  28:             }

  29:  

  30:             Console.WriteLine("All threads finished");

  31:         }

  32:  

  33:         static void ThreadMain(object o)

  34:         {

  35:             SemaphoreSlim semaphore = o as SemaphoreSlim;

  36:             Trace.Assert(semaphore!=null,"o must be a Semaphore type");

  37:             bool isCompleted = false;

  38:             while(!isCompleted)

  39:             {

  40:                 if(semaphore.Wait(600))

  41:                 {

  42:                     try

  43:                     {

  44:                         Console.WriteLine("Thread {0} locks the semaphore", Thread.CurrentThread.ManagedThreadId);

  45:                         Thread.Sleep(2000);

  46:                     }

  47:                     finally

  48:                     {

  49:                         semaphore.Release();

  50:                         Console.WriteLine("Thread {0} releases the semaphore",Thread.CurrentThread.ManagedThreadId);

  51:                         isCompleted = true;

  52:                     }

  53:                 }

  54:                 else

  55:                 {

  56:                     Console.WriteLine("Timeout for thread {0}:wait again", Thread.CurrentThread.ManagedThreadId);

  57:                 }

  58:             }

  59:             Console.Read();

  60:         }

  61:     }

  62: }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.