zoukankan      html  css  js  c++  java
  • C#多线程---Semaphore实现线程同步

    一、简介

    Semaphore类限制可同时访问某一资源或资源池的线程数线程通过调用 WaitOne方法将信号量减1,并通过调用 Release方法把信号量加1。

    构造函数:public Semaphore(int initialCount,int maximumCount);通过两个参数来设置信号的初始计数和最大计数。

    二、例子

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading;
     6 using System.Threading.Tasks;
     7 
     8 namespace ThreadMutex
     9 {
    10     class Program
    11     {
    12         private static Mutex mutex = new Mutex();
    13         private static Semaphore semaphore = new Semaphore(3, 10);
    14         private static int sum = 0;
    15         static void Main(string[] args)
    16         {
    17             for (int i = 0; i < 10; i++)
    18             {
    19                 Task<int> task = new Task<int>(ThreadFunction);
    20                 task.Start();
    21             }
    22             Console.WriteLine($"{DateTime.Now} task started!");
    23             Console.Read();
    24 
    25         }
    26         private static int ThreadFunction()
    27         {
    28             Thread.Sleep(100);
    29             if(semaphore.WaitOne(2000))
    30             {
    31                 Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} get semaphore successed!");
    32             }
    33             else
    34             {
    35                 Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} get semaphore failed!");
    36             }
    37           
    38             return sum;
    39         }
    40     }
    41 }
    View Code

    运行结果如下:

  • 相关阅读:
    图片《小美眉》
    redhat基本知识
    Linux 求助。设置分辨率?

    PHP close
    别想一个人承担一切
    java charAt返回char,不是int
    我的计算器
    支付宝面试小贴士
    java string charAt length()疑惑
  • 原文地址:https://www.cnblogs.com/3xiaolonglong/p/9651064.html
Copyright © 2011-2022 走看看