Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# 线程安全

作者:浪子罢了   发布日期:2025-12-29   浏览:21

using System;
using System.Threading;

class Program
{
    private static readonly object lockObject = new object();
    private static int counter = 0;

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

        thread1.Start();
        thread2.Start();

        thread1.Join();
        thread2.Join();

        Console.WriteLine("Final counter value: " + counter);
    }

    private static void IncrementCounter()
    {
        for (int i = 0; i < 1000; i++)
        {
            lock (lockObject)
            {
                counter++;
            }
        }
    }
}

解释说明

  1. 锁对象 (lockObject):

    • 使用 lock 关键字来确保同一时间只有一个线程可以访问临界区(即对 counter 的操作)。lockObject 是一个静态的 object,用于作为锁的对象。
  2. 计数器 (counter):

    • 这是一个共享资源,两个线程会同时尝试对其进行递增操作。如果没有适当的同步机制,可能会导致竞态条件(race condition),从而产生错误的结果。
  3. 线程 (Thread):

    • 创建了两个线程 thread1thread2,它们都调用 IncrementCounter 方法来递增 counter
  4. 线程启动与等待 (StartJoin):

    • Start 方法启动线程,Join 方法确保主线程等待子线程完成后再继续执行。
  5. 锁机制 (lock):

    • IncrementCounter 方法中,使用 lock 确保每次只有一个线程可以进入临界区,从而避免了竞态条件,保证了线程安全。

通过这种方式,我们可以确保即使在多线程环境下,counter 的值也能正确地被递增。

上一篇:c# drawstring

下一篇:c#httpclient

大家都在看

c# 二进制

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站