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

相关推荐
xiaoshuaishuai81 小时前
C# GPU算力与管理
开发语言·windows·c#
hez20103 小时前
C# 15 类型系统改进:Union Types
c#·.net·.net core
FL16238631294 小时前
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割
开发语言·算法·c#
C#程序员一枚5 小时前
高可用(High Availability, HA)
数据库·c#
weixin_520649876 小时前
C#进阶-特性全知识点总结
开发语言·c#
fengyehongWorld6 小时前
C# 创建vba用的类库
c#
澄澈青空~7 小时前
有一个叫R2C,也有一个叫G2C
java·数据库·人工智能·c#
PGFA9 小时前
深度剖析 C# LINQ 底层执行机制:别让你的应用内存莫名其妙“爆”掉!
c#·solr·linq
2601_9498146911 小时前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
CSharp精选营11 小时前
C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生
c#·try-catch·事务处理·transactionscope