首页 > 编程语言 >C#线程锁

C#线程锁

时间:2024-07-03 11:42:25浏览次数:1  
标签:index string Thread C# int static 线程

namespace ConsoleApp5
{
    internal class Program
    {
        public static int index;
        static void Main(string[] args)
        {
            for (int i = 0; i < 5; i++)
            {
                Thread thread = new Thread(FuncThread);
                thread.Start();
            }
            //等待所有线程执行完毕
            Thread.Sleep(5000);
            Console.ReadKey();
        }
        public static void FuncThread()
        {
            for (int i = 0; i < 5; i++)
            {
                index++;
                string threadId = string.Format("线程id:{0:D3}", Thread.CurrentThread.ManagedThreadId);
                string indexStr = string.Format("   {0:D3}", index);
                string str = threadId + indexStr;
                Console.WriteLine(str);
            }
        }
    }
}

  

创建多线程,调用同一个资源index,不加锁 在单独的线程中会出现跳跃状态,修改代码如下

namespace ConsoleApp5
{
    internal class Program
    {
        public static int index;
        public static object threadLock = new object();
        static void Main(string[] args)
        {
            for (int i = 0; i < 5; i++)
            {
                Thread thread = new Thread(FuncThread);
                thread.Start();
            }
            //等待所有线程执行完毕
            Thread.Sleep(5000);
            Console.ReadKey();
        }
        public static void FuncThread()
        {
            for (int i = 0; i < 5; i++)
            {
                lock (threadLock)//对于引用到index(公共资源的地方加锁)
                {
                    index++;
                    string threadId = string.Format("线程id:{0:D3}", Thread.CurrentThread.ManagedThreadId);
                    string indexStr = string.Format("   {0:D3}", index);
                    string str = threadId + indexStr;
                    Console.WriteLine(str);
                }
            }
        }
    }
}

  会得到如下结果

 

标签:index,string,Thread,C#,int,static,线程
From: https://www.cnblogs.com/xiaobao2017/p/18281290

相关文章

  • 01 | 为什么MapReduce会被硅谷一线公司淘汰?
    今天我要与你分享的主题是“为什么MapReduce会被硅谷一线公司淘汰”。我有幸几次与来Google参观的同行进行交流,当谈起数据处理技术时,他们总是试图打探MapReduce方面的经验。这一点让我颇感惊讶,因为在硅谷,早已没有人去谈论MapReduce了。今天这一讲,我们就来聊聊为什么......
  • 聊聊C++20的三向比较运算符 `<=>`
    C++20标准引入了许多新特性,其中之一是三向比较运算符<=>,也被称为太空船运算符。这个新运算符为C++程序员提供了一种全新的比较对象的方式,它能有效简化比较逻辑,避免编写多个比较运算符重载的情况。为什么需要三向比较运算符?在C++20之前,如果要完整地定义一个类型的比较行为......
  • 软考高级第四版备考--第8天(估算活动持续时间)Estimate Activity Durations
    定义:根据资源估算的结果,估算完成单项活动所需工作时段数的过程作用:确定完成每个活动所需花费的时间量说明:本过程需要在整个项目期间开展首先估算完成活动所需的工作量和计划投入该活动的资源数量然后结合项目日历和资源日历,据此估算出完成活动所需的工作时段(即活动持续时间)......
  • 外挂级OCR神器:免费文档解析、表格识别、手写识别、古籍识别、PDF转Word
    TextInTools是一款免费的在线OCR工具,支持快速准确的文字和表格识别,手写、古籍识别,提供PDF转Markdown大模型辅助工具,同时支持PDF、WORD、EXCEL、JPG、PPT等各类格式文件的转化。 TextInTools特点免费:所有产品提供每日200页免费额度,覆盖日常使用需求。方......
  • Vue canvas绘制圆形进度条动画加载
    父组件代码:<template> <!--创建--> <divclass="resource-warp-box">  <divclass="center-box">   <divclass="used-source">    <pageTitletitle="已用资源"/>    <div......
  • Jenkins 中 cd 与 dir
    Jenkinsfile如下:pipeline{agent{label'master'}stages{stage('tttt'){steps{sh"pwd"sh"mkdiraaa"dir('aaa'){......
  • jmeter之CSV文件传参乱码
    1.使用xlsx文件设置参数进行传参,  2.请求之后解析为乱码,原因是xlsx文件编码格式不是UTF-8 解决方案1.文另存为CSVUTF-8格式 2.保存完成后选择对应文件传参 3.运行后解析正确,没有乱码 ......
  • Activity和Fragment有什么区别
     Activity和Fragment是Android应用开发中两个非常重要的组件,它们都有各自的生命周期方法,包括onCreate。然而,它们有一些关键的区别:Activity独立性:Activity是一个独立的、可直接启动的组件。它通常代表应用的一个单一屏幕(界面)。生命周期:Activity有自己的完整生命周期......
  • JDK导入Let's Encrypt根证书
    项目在调用https接口时报错:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException:unabletofindvalidcertificationpathtorequestedtarget原因可能是更新换新证书后,HTTPS域名的公钥证书不在JDK/JRE的证书库中,被Java认为是不可信......
  • 解决办法:hyper-v导出虚拟机到ESXI报错找不到磁盘:dev disk by-uuid 4b85b6e9-f0d1-4dc
    linux救援模式可以进入系统,发现UUID都是正常的。执行以下命令确认的:[root@localhost~]#cat/etc/fstabUUID=4b85b6e9-f0d1-4dc8-a9dd-aafad7b4354c/xfsdefaults00UUID=24c8c603-e6bd-453c-982f-79e9df3468fd/bootxfsdefaults00UUID=53608cf9-17c1-40c5-85ed-f88......