c#多线程 使用lock锁

使用 lock 关键字可以确保在同一时刻只有一个线程可以访问被锁定的代码块,从而避免线程资源竞争。以下是修改后的示例代码:

csharp 复制代码
using System;
using System.Threading;

class Program
{
    static int sharedNumber = 0;
    static int iterations = 1000000;
    static object lockObject = new object();

    static void Main(string[] args)
    {
        Thread thread1 = new Thread(Increment);
        Thread thread2 = new Thread(Increment);

        thread1.Start();
        thread2.Start();
        //等待线程执行完毕(不加join结果可能会不一样)
        thread1.Join();
        thread2.Join();

        Console.WriteLine("Final shared number: " + sharedNumber);
    }

    static void Increment()
    {
        for (int i = 0; i < iterations; i++)
        {
            lock (lockObject)
            {
                sharedNumber++;
            }
        }
    }
}

在这个示例中,我们使用 lock 关键字来锁定对 sharedNumber 的访问。这样,只有一个线程可以同时访问 sharedNumber,从而避免了线程资源竞争,确保了正确的递增操作。

相关推荐
github.com/starRTC1 小时前
Claude Code中英文系列教程34:再谈Skills
开发语言·c#·ai编程
bugcome_com3 小时前
C# 判断语句详解(if、switch、三目运算符、Null 条件运算符)
c#
郝学胜-神的一滴5 小时前
Effective Modern C++ 条款37:使std::thread在所有路径最后都不可结合
开发语言·c++·程序人生·多线程·并发·std
霸王•吕布6 小时前
C#-使用OpenTK渲染3D模型
c#·opentk·glcontrol
游乐码6 小时前
c#封装成员变量和成员方法和访问修饰符
开发语言·c#
Never_Satisfied6 小时前
在c#中,Jint的AsString()和ToString()的区别
服务器·开发语言·c#
Never_Satisfied6 小时前
在c#中,获取文件的大小
java·开发语言·c#
weixin_468466857 小时前
PyTorch导出ONNX格式分割模型及在C#中调用预测
人工智能·pytorch·深度学习·c#·跨平台·onnx·语义分割
光泽雨15 小时前
C# 中 Assembly 类详解
开发语言·c#
少控科技15 小时前
C#基础训练营 - 02 - 运算器
开发语言·c#