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

c# 线程安全队列

作者:半写的温柔ノ   发布日期:2026-01-06   浏览:30

using System;
using System.Collections.Concurrent;
using System.Threading;

class Program
{
    // 使用 ConcurrentQueue 来实现线程安全的队列
    private static readonly ConcurrentQueue<int> queue = new ConcurrentQueue<int>();

    static void Main(string[] args)
    {
        // 创建并启动多个线程来模拟并发操作
        Thread producer1 = new Thread(Producer);
        Thread producer2 = new Thread(Producer);
        Thread consumer = new Thread(Consumer);

        producer1.Start();
        producer2.Start();
        consumer.Start();

        // 等待所有线程完成
        producer1.Join();
        producer2.Join();
        consumer.Join();

        Console.WriteLine("All threads have completed.");
    }

    // 生产者方法,向队列中添加数据
    static void Producer()
    {
        for (int i = 0; i < 5; i++)
        {
            int item = i;
            queue.Enqueue(item); // 线程安全的 Enqueue 操作
            Console.WriteLine($"Produced: {item}");
            Thread.Sleep(100); // 模拟生产时间
        }
    }

    // 消费者方法,从队列中移除数据
    static void Consumer()
    {
        while (!queue.IsEmpty)
        {
            if (queue.TryDequeue(out int item)) // 线程安全的 TryDequeue 操作
            {
                Console.WriteLine($"Consumed: {item}");
                Thread.Sleep(150); // 模拟消费时间
            }
        }
    }
}

解释说明

  1. ConcurrentQueue:

    • ConcurrentQueue<T> 是 C# 中提供的线程安全队列。它确保在多线程环境中对队列的操作(如 EnqueueTryDequeue)是安全的,无需额外的锁机制。
  2. Producer 方法:

    • 该方法模拟生产者行为,向队列中添加数据。使用 Enqueue 方法将数据添加到队列中,此方法是线程安全的。
    • Thread.Sleep 用于模拟生产时间,确保线程不会过快执行。
  3. Consumer 方法:

    • 该方法模拟消费者行为,从队列中移除数据。使用 TryDequeue 方法尝试从队列中取出数据,此方法也是线程安全的,并且会返回一个布尔值表示是否成功取出了数据。
    • Thread.Sleep 用于模拟消费时间,确保线程不会过快执行。
  4. 多线程环境:

    • 创建了两个生产者线程和一个消费者线程,模拟并发操作。通过 Join 方法确保主线程等待所有子线程完成后再继续执行。

这个示例展示了如何使用 ConcurrentQueue<T> 实现线程安全的队列操作,确保在多线程环境下数据的一致性和安全性。

上一篇:c# get set用法

下一篇:c# zip

大家都在看

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 中文站