C#多线程---Semaphore实现线程同步
2024-10-03 05:07:00
一、简介
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 }
运行结果如下:
最新文章
- Hihocoder 1079 离散化
- shutdown
- Idea15/16 配置Tomcat
- sbt %%
- bootstrap插件学习-bootstrap.alert.js
- python scrapy 获取华为应用市场APP评论数据
- 【Toolkit】关闭Closeable的简单工具类
- javaSE之如何将一个文档显示出来(,txt,.doc,.....)
- slowhttps安装及使用心得
- 微软职位内部推荐-Enterprise Architect - BDE - BJ
- spserver 开源服务器框架研究与分析
- ReactNative布局样式总结
- AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】
- awk的sub函数和gsub函数的用法
- HI3531由DMA 发起PCIe 事务
- Java核心技术卷一基础知识-第7章-图形程序设计-读书笔记
- windows中dir命令
- leetcode46
- 《GPU高性能编程CUDA实战》第四章 简单的线程块并行
- C语言扫盲篇