gpt4 book ai didi

.net - 并发软件设计

转载 作者:行者123 更新时间:2023-12-03 13:19:11 25 4
gpt4 key购买 nike

我有一个软件项目,它需要与不同的网络主机通信并对 UI 事件、来自不同套接字的各种网络消息、计时器等事件使用react......

我的问题是我找不到令人满意的解决方案来确保线程安全,同时仍然提供非阻塞方法。我有一些相互依赖的类,在我的想象中,我看到许多线程通过我的类的方法在不受控制的越野中运行。所以我必须为所有东西创建锁。

我认为通过添加太多锁,我的方法几乎可以表现得像阻塞锁一样,并产生像死锁这样的错误。

我需要使用 .NET 3.5,但我很好奇在任何语言/框架中对此的解决方案是什么样的(也许使用 .Net > 3.5 会是解决方案?)

起初,我尝试想象使用 Begin...() 方法创建的线程流。所以我的第一个方法是定义一个充满线程的手来维护我的应用程序的某个部分(例如网络线程、事件线程……)。这样我理论上可以减少对锁的需求,因为资源只绑定(bind)到一个线程。

由于这些线程必须关心不同的操作,我尝试实现自己的事件队列(参见 How to implement a message pump in Non-UI thread in .NET?),但感觉如果 .Net 至少没有为此目的提供某种模式,那么可能会有更好的解决方案问题。

我继续阅读有关设计模式等的所有 MSDN 页面,这很有帮助,但我仍然没有看到全貌。

我认为这是 .Net 或一般并发编程中的常见场景。也许我只是没有看到摆在我面前的解决方案。如果是这样,如果有人能指出我正确的方向,我会很高兴。

这是一个复杂的话题,很难解释。希望我能提供足够的信息。如果有什么不清楚的,请询问。

感谢您的帮助。

最佳答案

我觉得 producer/consumer pattern 很有用.基本上,您可以拥有不对称数量的生产者和消费者,例如,这允许您让多个线程为一个队列提供数据,而只有一个线程在使用它们;或多个线程竞争处理队列中的消息。

How to: Implement a Producer-Consumer Dataflow Pattern

在您的情况下,来自套接字和 UI 事件的消息将是需要处理的数据片段,然后您可以让一个线程(在您的情况下可能是 UI 线程)从该队列中读取,并在 UI 上执行操作。这样,该线程就不需要锁定所有内容。

关于.net - 并发软件设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42275773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com