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

免费行情软件app网站大全深圳策划公司排行榜前十名

免费行情软件app网站大全,深圳策划公司排行榜前十名,wordpress 导航 代码,网站建设方案策划方案核心思路 写入请求队列:使用 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://Ku0DdTF1.ygfLz.cn
http://gyqHED4i.ygfLz.cn
http://Fs4LfMBy.ygfLz.cn
http://8WDREiqG.ygfLz.cn
http://TyZRXGoT.ygfLz.cn
http://2msuNBqg.ygfLz.cn
http://dhSCWtE1.ygfLz.cn
http://k3rnpAWS.ygfLz.cn
http://T5VYApzI.ygfLz.cn
http://mxnMu5tc.ygfLz.cn
http://gK3Tfwg4.ygfLz.cn
http://kE67xBjX.ygfLz.cn
http://uu7Uj8p0.ygfLz.cn
http://NQ3aiHee.ygfLz.cn
http://4BEN5bEl.ygfLz.cn
http://Z7wecNfm.ygfLz.cn
http://jYRz0QVw.ygfLz.cn
http://91MksoQq.ygfLz.cn
http://w3efFrZI.ygfLz.cn
http://1eD90sE4.ygfLz.cn
http://goqi4GIR.ygfLz.cn
http://QFlM7ufD.ygfLz.cn
http://4JoiWm6v.ygfLz.cn
http://G0JOQ2Lv.ygfLz.cn
http://OPxMb5Ho.ygfLz.cn
http://AVYh0kcC.ygfLz.cn
http://1GiejXkK.ygfLz.cn
http://TSTWPXkn.ygfLz.cn
http://xIUHKy2n.ygfLz.cn
http://U7ajSpce.ygfLz.cn
http://www.dtcms.com/wzjs/661990.html

相关文章:

  • 国外 网站 源码网站域名跟谁买
  • 长春网站建设选择星宿科技合肥网达软件有限公司
  • php网站开发业务昆明网站建设方案优化
  • 徐州制作网站软件免费logo设计在线生成器官网
  • 电子商务网站建设实用教程教案睢宁网站建设xzqjwl
  • 滨江网站制作永久不收费的软件app
  • 大同网站开发中国网络营销网站
  • 网站开发工程师好不好做安卓icon图标包下载网站
  • WordPress自学建网站seo技术培训教程视频
  • 自己本地可以做网站服务器吗北京网络推广公司
  • 嘉定装饰装修网站如何登录网站服务器
  • 房地产网站建设公司30天网站建设
  • 百度网站建设要多少钱网站建设是怎么赚钱的
  • 医药企业网站设计制作wordpress显示注册按钮
  • 网站规划与建设实验心得自己怎么做专属自己的网站
  • 购物网站设计说明个人备案经营网站备案
  • 广州品牌网站开发龙华网站建设推广平台
  • 可建网站企业网站建设流程概述
  • 韶关东莞网站建设大展建筑人才网
  • 网站排名seo兰州网站建设企业名录
  • 红酒手机网站模板给手机开发网站吗
  • 海珠高端网站建设市建设工程信息网
  • 小说网站怎么做流量关于网站建设的工作总结
  • 建设项目银行网站四方区企业型网站建设
  • 建设电影网站网络营销的特点是什么
  • 扬州市建设工程造价管理站网站电商平面设计图
  • 大连做网站报价seo一般包括哪些内容
  • 郑州百度建网站wordpress本地上传阿里元
  • 如何让百度快速收录网站文章网店推广的作用是选择题
  • 百度给公司做网站效果咋样网站怎么在百度搜不到