本文主要是介绍C#实现Queue的加锁和解锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在C#中,可以使用lock
语句来对队列进行加锁和解锁,以确保在多线程环境下的线程安全。以下是一个简单的示例:
using System;
using System.Collections.Generic;
using System.Threading;public class ThreadSafeQueue<T>
{private readonly Queue<T> _queue = new Queue<T>();private readonly object _lockObject = new object();public void Enqueue(T item){lock (_lockObject){_queue.Enqueue(item);}}public T Dequeue(){lock (_lockObject){return _queue.Dequeue();}}public int Count{get{lock (_lockObject){return _queue.Count;}}}
}class Program
{static void Main(string[] args){ThreadSafeQueue<int> threadSafeQueue = new ThreadSafeQueue<int>();Thread producer = new Thread(() =>{for (int i = 0; i < 10; i++){threadSafeQueue.Enqueue(i);Console.WriteLine($"Produced: {i}");Thread.Sleep(1000);}});Thread consumer = new Thread(() =>{while (threadSafeQueue.Count > 0){int item = threadSafeQueue.Dequeue();Console.WriteLine($"Consumed: {item}");Thread.Sleep(1000);}});producer.Start();consumer.Start();producer.Join();consumer.Join();Console.WriteLine("Finished");}
}
在这个示例中,ThreadSafeQueue<T>
类封装了一个队列,并提供了线程安全的Enqueue
、Dequeue
方法和一个获取队列元素数量的属性。通过使用同一个锁对象_lockObject
,可以确保在执行入队、出队操作时不会发生竞态条件。
这篇关于C#实现Queue的加锁和解锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!