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

每日财经早报排名优化网站

每日财经早报,排名优化网站,网站后台视频教程,国外服装购物网站大全方案核心思路 写入请求队列:使用 ConcurrentQueue 接收来自任意线程的写入请求。 专用写入线程:由独立线程处理队列中的写入操作,确保顺序执行。 双信号机制:通过 ManualResetEventSlim 控制读取线程的暂停与恢复。 线程安全确…

方案核心思路

  1. 写入请求队列:使用 ConcurrentQueue 接收来自任意线程的写入请求。

  2. 专用写入线程:由独立线程处理队列中的写入操作,确保顺序执行。

  3. 双信号机制:通过 ManualResetEventSlim 控制读取线程的暂停与恢复。

  4. 线程安全确认:确保多个线程同时触发写入时,不会导致竞态条件。

完整代码实现

using System;
using System.Collections.Concurrent;
using System.Threading;public class CrossThreadReadWriteController
{// 控制读取线程暂停和恢复的信号private readonly ManualResetEventSlim _pauseRequest = new ManualResetEventSlim(false);// 读取线程确认已暂停的信号private readonly ManualResetEventSlim _pausedConfirmed = new ManualResetEventSlim(false);// 写入请求队列(线程安全)private readonly ConcurrentQueue<Action> _writeQueue = new ConcurrentQueue<Action>();// 停止标志private volatile bool _stopRequested = false;// 写入专用线程private Thread _writeThread;public CrossThreadReadWriteController(){// 启动写入专用线程_writeThread = new Thread(ProcessWriteQueue);_writeThread.Start();}// 读取线程的循环任务public void ReadLoop(){while (!_stopRequested){// 检查是否需要暂停if (_pauseRequest.IsSet){// 确认已暂停,并等待恢复信号_pausedConfirmed.Set();_pauseRequest.Wait();_pausedConfirmed.Reset();}// 模拟读取操作Console.WriteLine($"[Read] {DateTime.Now:HH:mm:ss.fff} - Reading data...");Thread.Sleep(1000); // 模拟耗时操作}Console.WriteLine("[Read] Thread stopped.");}// 处理写入队列的专用线程private void ProcessWriteQueue(){while (!_stopRequested || !_writeQueue.IsEmpty){if (_writeQueue.TryDequeue(out var writeAction)){// 触发暂停读取线程RequestPause();// 执行写入操作writeAction.Invoke();// 恢复读取线程ResumeRead();}else{Thread.Sleep(50); // 队列为空时短暂休眠}}Console.WriteLine("[Write] Thread stopped.");}// 跨线程提交写入请求public void SubmitWriteCommand(Action writeAction){_writeQueue.Enqueue(writeAction);}// 请求暂停读取线程(线程安全)private void RequestPause(){_pauseRequest.Set();_pausedConfirmed.Wait(); // 等待读取线程确认暂停}// 恢复读取线程(线程安全)private void ResumeRead(){_pauseRequest.Reset();}// 停止所有线程public void Stop(){_stopRequested = true;_pauseRequest.Set(); // 确保读取线程退出等待_writeThread.Join(); // 等待写入线程结束}
}// 使用示例
public class Program
{public static void Main(){var controller = new CrossThreadReadWriteController();// 启动读取线程var readThread = new Thread(controller.ReadLoop);readThread.Start();// 模拟多个线程触发写入操作for (int i = 0; i < 3; i++){var threadId = i;new Thread(() =>{controller.SubmitWriteCommand(() =>{Console.WriteLine($"[Write-{threadId}] {DateTime.Now:HH:mm:ss.fff} - Writing data...");Thread.Sleep(500); // 模拟耗时操作});}).Start();}Thread.Sleep(5000); // 等待所有写入完成controller.Stop();readThread.Join();Console.WriteLine("Main thread exited.");}
}

关键改进解析

1. 跨线程写入请求的提交

通过 SubmitWriteCommand 方法,任何线程均可提交写入操作:

public void SubmitWriteCommand(Action writeAction)
{_writeQueue.Enqueue(writeAction); // 线程安全入队
}
2. 专用写入线程处理队列

写入操作由独立线程顺序处理,避免多线程并发写入冲突:

private void ProcessWriteQueue()
{while (!_stopRequested || !_writeQueue.IsEmpty){if (_writeQueue.TryDequeue(out var writeAction)){RequestPause();   // 暂停读取线程writeAction();    // 执行写入ResumeRead();     // 恢复读取线程}}
}
3. 双重信号确保原子性

通过 RequestPause 和 ResumeRead 方法封装暂停与恢复逻辑:

private void RequestPause()
{_pauseRequest.Set();      // 发送暂停信号_pausedConfirmed.Wait();  // 阻塞等待读取线程确认暂停
}
4. 线程安全停止机制

通过 _stopRequested 标志和队列检查确保安全退出:

public void Stop()
{_stopRequested = true;_writeThread.Join(); // 等待写入线程处理完队列
}

运行效果

[Read] 14:30:01.123 - Reading data...
[Read] 14:30:02.124 - Reading data...
[Write-0] 14:30:03.125 - Writing data...
[Read] 14:30:03.626 - Reading data...
[Write-1] 14:30:04.127 - Writing data...
[Read] 14:30:04.628 - Reading data...
[Write-2] 14:30:05.129 - Writing data...
Main thread exited.

方案优势

特性说明
多线程安全通过 ConcurrentQueue 和信号量,支持任意线程触发写入操作。
顺序执行写入操作由专用线程顺序处理,避免并发冲突。
无锁读取读取线程在非写入状态下完全无锁,最大化性能。
精准控制通过双信号机制确保写入操作执行期间读取线程完全暂停。

适用场景

  • 分布式任务调度:多个工作线程提交写入请求,由中心线程处理。

  • 实时数据采集:采集线程持续读取数据,外部线程动态更新配置。

  • 高并发服务:如网络服务器,处理来自不同客户端的并发更新操作。

注意事项

  1. 队列积压风险:若写入操作频率过高,需监控队列长度或添加背压机制。

  2. 异常处理:在写入操作中需捕获异常,避免导致写入线程崩溃。

  3. 性能调优:可根据场景调整 Thread.Sleep 时间或使用无等待策略。

http://www.dtcms.com/wzjs/17027.html

相关文章:

  • 湛江专业官网建站个人网站怎么建立
  • 石家庄购物网站排名百度网址大全旧版
  • 做分子生物实验常用网站公司网站建设北京
  • 网站开发建设协议sem竞价广告
  • 怎么做网站信任站长之家网站介绍
  • 网站设计的技术选择网站的建设流程
  • 门设计的网站建设免费个人推广引流平台
  • 北京做养生SPA的网站建设百度注册页面
  • 小语种网站建设要点如何制作网页链接
  • 十大网站建设手机百度安装下载
  • 林州网站建设报价站长推荐
  • 自学it做网站百度搜索风云榜排名
  • 湖北企业商城网站建设b站推广网站2024
  • 南昌正规网站公司电子商务网站建设与管理
  • 手机门户网站开发怎么搭建网站
  • 做网站看什么书在线域名解析ip地址
  • 公司专业网页制作福建网络seo关键词优化教程
  • 网站建设项目进度表制作网页的网站
  • 河北网站建设哪家好厦门人才网招聘
  • 小猪会飞网站建设免费个人推广引流平台
  • 北京楼市暴跌黄山搜索引擎优化
  • 越秀区网站建设公司谷歌网页版入口在线
  • 项目建设总结报告搜索引擎优化技巧
  • 免费建站网站自助建站的网站建站全国免费发布广告信息
  • 织梦网站404怎么做安卓优化大师手机版
  • 团购网站建设案例网络公司关键词排名
  • 重庆梁平网站建设哪家便宜汕头企业网络推广
  • 无锡做网站优化亚马逊关键词搜索器
  • 上海宝山网站建设培训班百度网盘官方网站
  • 免费作图网站都有哪些网站seo优化徐州百度网络