lock的用法

最近写程序遇到一个问题,使用httpListener写服务的时候,需要对客户端消息进行顺序处理,即处理完一个再处理下一个,然后再开发过程当中,我使用lock对过程代码进行了锁,旨在让程序顺序处理。在lock介绍时,都是说当一个线程在使用lock中的代码,另一个程序需要顺序等待,只有等第一个执行完成后,释放lock资源时,才能进入,但在实际开发过程中,是多个线程同时遇到lock时,会排队顺序进入其中执行,而不会等待上一个是否处理完成,相当于限流,但不是阻塞,这个导致中间代码逻辑处理比较耗时,而逻辑又承上启下的话,后续处理和自己理想中的不一样,而如果后一个在lock中去等待上一个执行完成的话,会导致所有程序都进行不下去,在外层加一个等待也是一样的效果,因为我在外层已经排过一次序了,所以我这里是双层锁,一个是锁客户端,一个是锁消息,发现的不理想,所以我现在的解决办法是在锁方法里加一个变量,在将要进入时,通过判断变量判断这段代码是否正在被执行,如果正在执行,则放弃当前的连接,这样会导致有些客户端会接收超时并重新发送数据,就是所谓的数据丢失。回头我想再试试在客户端接收数据入口处直接去处理,判断是否正在处理消息,如果正在处理消息,则排序等待,否则再顺序进入,回头就去测试一下,如果可以行得通的话,那么就不用丢弃数据了。回头如果有测试结果再继续发布,如果大家也遇到这样的问题,可以注意一下,或者如果有好的建议,欢迎讨论。

相关推荐
xiaogutou11212 小时前
2026年历史课件PPT模板选购指南:教师备课效率与精度的平衡方案
开发语言·c#
Eiceblue5 小时前
使用 C# 将 Excel 转换为 Markdown 表格(含批量转换示例)
开发语言·c#·excel
不会编程的懒洋洋7 小时前
WPF XAML+布局+控件
xml·开发语言·c#·视觉检测·wpf·机器视觉·视图
唐青枫7 小时前
别再层层传参了!C#.NET AsyncLocal 异步上下文透传实战
c#·.net
明如正午9 小时前
【C#】托管调试助手 “PInvokeStackImbalance“:的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
c#
Eiceblue9 小时前
C# 如何实现 Word 转 Excel ?分享两种实用方法
c#·word·excel
天才少女爱迪生9 小时前
word格式规范检测+自动修改【python】
python·c#·word
用户37215742613510 小时前
如何使用 C# 转换 PowerPoint 为 HTML:完整指南
c#
软泡芙10 小时前
【C# 】各种等待大全:从入门到精通
开发语言·c#·log4j
夏霞11 小时前
IIS 应用程序池 3 种标识:ApplicationPoolIdentity / LocalSystem / LocalService 权限区别(超清晰)
c#·.net