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); // 模拟消费时间
}
}
}
}
ConcurrentQueue:
ConcurrentQueue<T> 是 C# 中提供的线程安全队列。它确保在多线程环境中对队列的操作(如 Enqueue 和 TryDequeue)是安全的,无需额外的锁机制。Producer 方法:
Enqueue 方法将数据添加到队列中,此方法是线程安全的。Thread.Sleep 用于模拟生产时间,确保线程不会过快执行。Consumer 方法:
TryDequeue 方法尝试从队列中取出数据,此方法也是线程安全的,并且会返回一个布尔值表示是否成功取出了数据。Thread.Sleep 用于模拟消费时间,确保线程不会过快执行。多线程环境:
Join 方法确保主线程等待所有子线程完成后再继续执行。这个示例展示了如何使用 ConcurrentQueue<T> 实现线程安全的队列操作,确保在多线程环境下数据的一致性和安全性。
上一篇:c# get set用法
下一篇:c# zip
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站