0

我有 vb.net 应用程序,它的作用类似于服务器(Echo),它允许客户端(另一个应用程序)向服务器查询不同类型的文档或其他文件。现在我面临的问题是,当应用程序(服务器) 是 UP,它在单线程上运行。但是当来自同一台机器或其他机器的客户端尝试连接到服务器进行查询时,应用程序会启动另一个线程来与服务器建立连接。因此,在调试服务器时(VB.Net 应用程序),我们发现控制切换从在一个线程上执行的操作,该线程从服务器启动时启动到客户端连接到服务器时启动的另一个线程。但我想要整个操作要在从服务器启动时开始的同一线程上完成。

客户端尝试连接到服务器后启动的第二个线程是因为我们使用第三方控件名称 Dart TCP 来连接服务器和客户端,在客户端连接到服务器时,我们使用的是客户端连接时在Initialize方法中调用的方法,如下面的代码:

server.start(新的 ConnectThreadStart(AddressOf connectionstart),端口,状态)。这里,connectionstart是启动连接的方法,负责服务器和客户端之间的通信,直到两者中的任何一个结束连接。

提供的任何解决方案或想法将不胜感激。在此先感谢。

4

1 回答 1

0

如您所见,有一个以新请求开始的新线程(这很好)。

使所有线程共享一些配置设置的一种(非常糟糕的)方法是使用存储配置的线程安全变量。当一个线程需要访问它时,它会获取该变量的锁,对其进行读取或写入,然后释放锁。

相当糟糕的部分是所有线程都依赖于一个单一的资源 - 这可能会使整个应用程序比必要的慢 - 一个请求可能会锁定配置变量,而所有其他请求在需要读取它时都会停止。僵局。

不过,也许它对于调试来说已经足够了。

更多关于资源锁定的信息:http: //support.microsoft.com/kb/816161

更好的方法(避免死锁)是使用不可变的数据结构,现在似乎可以通过NuGet ImmutableHashMap

于 2013-08-16T11:33:01.860 回答