首页 > 编程语言 >C# 多线程同步(Mutex | Semaphore)

C# 多线程同步(Mutex | Semaphore)

时间:2025-01-22 09:34:39浏览次数:1  
标签:Console Thread C# static Mutex Semaphore new 多线程

Mutex: 用于保护临界区,确保同一时间只有一个线程能够访问共享资源;
Semaphore: 允许同时有多个线程访问共享资源,但会限制并发访问的数量。

 

Mutex运行输出

 

Semaphore运行输出

 

namespace SyncThreadDemo
{
    internal class Program
    {
        static string strlock = "Semaphore";// Mutex | Semaphore
        static Mutex mutex = new Mutex();
        static Semaphore semaphore = new Semaphore(2, 2); // 允许同时有两个线程访问

        static void Main(string[] args)
        { 
            Thread[] threads = new Thread[3];
            for (int i = 0; i < 3; i++) { threads[i] = new Thread(new ThreadStart(ThreadMethod)); threads[i].Name = "Thread-" + (i + 1); }
            for (int i = 0; i < 3; i++) { threads[i].Start(); }
            Console.ReadKey();
        }

        static void ThreadMethod()
        {
            Console.WriteLine($"{Thread.CurrentThread.Name} is waiting");

            // 锁住
            switch (strlock)
            {
                case "Mutex": mutex.WaitOne(); break;
                case "Semaphore": semaphore.WaitOne(); break;
            }

            try
            {
                Console.WriteLine($"{Thread.CurrentThread.Name} has acquired");
                Thread.Sleep(100);// 模拟执行动作
            }
            finally
            {
                Console.WriteLine($"{Thread.CurrentThread.Name} is releasing"); 

                // 解锁
                switch (strlock)
                {
                    case "Mutex": mutex.ReleaseMutex(); break;
                    case "Semaphore": semaphore.Release(); break;
                }
            }
        } 
    }
}

 

标签:Console,Thread,C#,static,Mutex,Semaphore,new,多线程
From: https://www.cnblogs.com/chen1880/p/18685016

相关文章

  • 你有使用过postcss吗?它和less/scss/stylus有什么区别?
    是的,我有使用过PostCSS。PostCSS与Less、SCSS(Sass的新语法)、Stylus在前端开发中各自扮演着不同的角色,它们之间的主要区别可以归纳如下:本质与用途:PostCSS:它是一个使用JavaScript插件转换CSS的工具。PostCSS本身不添加任何CSS语法,而是通过插件来实现各种功能,比如自动添加浏览器......
  • 在使用canvas的arc绘制图像时应注意什么?
    在使用HTML5Canvas的arc方法绘制图像时,有几个重要的注意事项:理解参数:arc方法接收六个参数,分别是圆心的x坐标、圆心的y坐标、半径、起始角度、结束角度和绘图方向(可选)。确保你完全理解这些参数的含义,以及如何正确地使用它们。context.arc(x,y,radius,startAngle,......
  • 如何修改美化radio、checkbox的默认样式?
    修改和美化HTML中的radio和checkbox的默认样式,主要可以通过CSS和一些前端技巧来实现。下面是一个基本的步骤指南,以及一些示例代码,帮助你开始这个过程。步骤指南隐藏默认的输入元素:使用CSS的display:none;或visibility:hidden;(配合其他布局技巧)来隐藏默认的ra......
  • threeJS代码示例(002):两种方法更改Scene的颜色
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第002个示例文章目录一、......
  • Python可视化神器1-Pyecharts绘图详细教程-初识Pyecharts
    前言文档位于 pyecharts-APythonEchartsPlottingLibrarybuiltwithlove.示例位于 Documentecharts官网 https://www.echartsjs.com/zh/index.html1.简介1.1Pyecharts是什么Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众......
  • 定义税码的存取顺序Access Sequence(OBYZ)
    本文主要介绍在S4 HANA OP中税码的存取顺序AccessSequence。具体请参照如下内容:以上可以看出“条件类型”MWVS的“存取顺序”MWST,其中“存取顺序”中的“存取2”中维护了根据“客户国家+税码”2个字段去条件表A4VA中获取“条件类型”MWVS的最终值。其中KOMP和KOMK是用......
  • 凭证Account Assignment的校验(FAGL_VALIDATE)
    本文主要介绍在S4 HANA OP中凭证AccountAssignment的校验配置。具体请参照如下内容:目录1.定义AccountAssignment校验策略(FAGL_VALIDATE)1.1DerivationRule1.2Assignment1.3Initialize1.4Enhancement2.分配AccountAssignment校验策略给公司代码/LedgerGrou......
  • canvas有哪些可以提升性能的优化方法?
    在前端开发中,优化Canvas性能的方法有多种,以下是一些主要的优化策略:减少绘制操作:Canvas的绘制操作是相对耗费性能的,因此应尽量减少不必要的绘制。例如,可以通过合并多个绘制操作为一个复合操作来降低绘制次数。另外,使用双缓冲技术也是一种有效的减少绘制次数的方法。选择合适的图......
  • 工程师必知:电源管理IC的八种类型
    工程师必知:电源管理IC的八种类型引言         在日常生活中,人们对电子设备的依赖越来越严重,电子技术的更新换代,也同时意味着人们对电源的技术发展寄予厚望,下面就为大家介绍电源管理技术的主要分类。    电源管理半导体从所包含的器件来说,明确强调电......
  • 卷积神经网络(CNN)图像分类案例
    一个基于卷积神经网络(ConvolutionalNeuralNetwork,CNN)的图像分类完整案例。该案例使用PyTorch构建一个CNN模型来对CIFAR-10数据集进行分类。1.环境准备安装PyTorch和必要的库(如未安装):pipinstalltorchtorchvisionmatplotlib2.导入必要的库importto......