当前位置: 首页 > news >正文

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>类封装了一个队列,并提供了线程安全的EnqueueDequeue方法和一个获取队列元素数量的属性。通过使用同一个锁对象_lockObject,可以确保在执行入队、出队操作时不会发生竞态条件。 

http://www.lryc.cn/news/355600.html

相关文章:

  • 北京邮电大学人工智能考数据结构,均分370!北京邮电大学计算机考研考情分析!
  • 1. lambda初体验
  • C#之显示转换
  • 汇编原理(三)编程
  • [MySQL数据库] Java的JDBC编程(MySQL数据库基础操作完结)
  • 绿色瓶装水“暗战”竞争越发激烈,华润饮料谋上市同时多地扩产能
  • C语言之指针详解(4)
  • 0基础学习小红书博主IP特训营,37天 教你从小白到KOL(13节)
  • 【openlayers系统学习】3.1-3.2彩色GeoTIFF图像渲染
  • 前端自动将 HTTP 请求升级为 HTTPS 请求
  • 辅助驾驶ADAS功能算法介绍
  • Docker 安装kingbase V8r6
  • Python 应用打包成 APK【全流程】
  • jmeter之MD5加密接口请求教程
  • R18 NTN中的RACH-less HO
  • QT使用gsoap获取手机归属地
  • 抖音本地生活服务商入驻指南分享!
  • 【量算分析工具-水平距离】GeoServer改造Springboot番外系列四
  • vs2019 c++20 规范的 STL 库的智能指针 shared、unique 、weak 及 make_** 函数的源码注释汇总,和几个结论
  • 【大模型】 基于AI和全球化进程的权衡:开源大模型与闭源大模型
  • 强化学习——学习笔记
  • NAT简介
  • 联想凌拓 NetApp AFF C250 全闪存存储助力丰田合成打造数据新“引擎”
  • 红队技巧:仿冒Windows登录
  • 821. 字符的最短距离 - 力扣
  • BI工具如何为金融行业带来变革?金融行业营销管理策略大揭秘
  • 操作系统 - 计算机系统概述
  • [论文笔记]REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS
  • []下标的意义
  • 去重复记录和排序——kettle开发09