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,从而避免了线程资源竞争,确保了正确的递增操作。

相关推荐
追逐时光者5 小时前
一个致力于为 C# 程序员提供更佳的编码体验和效率的 Visual Studio 扩展插件
后端·c#·visual studio
SunflowerCoder7 小时前
EF Core + PostgreSQL 配置表设计踩坑记录:从 23505 到 ChangeTracker 冲突
数据库·postgresql·c#·efcore
阿蒙Amon10 小时前
C#每日面试题-常量和只读变量的区别
java·面试·c#
我是唐青枫10 小时前
C#.NET ConcurrentBag<T> 设计原理与使用场景
c#·.net
大王小生11 小时前
C# CancellationToken
开发语言·c#·token·cancellation
listhi52011 小时前
基于C#实现屏幕放大镜功能
开发语言·c#
该用户已不存在14 小时前
不止是初始化,4个C# 构造函数解析与实例
后端·c#·.net
无风听海17 小时前
深入讲解 C# 中 string 如何支持 CultureInfo
开发语言·c#
wzfj1234517 小时前
FreeRTOS xTaskCreateStatic 详解
开发语言·c#
kylezhao201917 小时前
C# DataGridView 控件使用详解
c#