【发布时间】:2012-02-01 23:49:16
【问题描述】:
我有一个服务器,它处理多个传入的套接字连接并创建 2 个不同的线程,以 XML 格式存储数据。
我几乎在每个异步调用的事件处理程序和代码不同部分的 2 个线程中都使用了 lock 语句来保证线程安全。遗憾的是,使用这种方法我的应用程序明显变慢了。
我尝试完全不使用lock,服务器执行速度非常快,甚至文件存储似乎也有所提升;但是程序在 30 秒 - 1 分钟后由于我不明白的原因而崩溃。工作。
所以。我认为最好的方法是使用更少的锁或仅在绝对必要的地方使用它。因此,我有两个问题:
仅当我写入公共访问变量(C# 列表)或什至读取它们时是否需要锁定?
是否只有在由套接字处理程序创建的异步线程或其他地方也需要锁?
有人可以给我一些实用的指导,关于如何操作。这次我不会发布整个代码。发布大约 2500 行代码是没有意义的。
【问题讨论】:
-
不够具体,请在此处查看一般信息:albahari.com/threading
-
有各种可能的程序 - 从绝对错误/极快到始终正确/相当慢。你的实验似乎达到了两端。线程安全是一个重要的话题,所以我建议阅读它而不是仅仅试图获得“实用指南”。 IE。 eulerfx 的链接是很好的起点。
标签: c# multithreading optimization thread-safety