gpt4 book ai didi

vb.net - 在线程之间共享信息

转载 作者:行者123 更新时间:2023-12-03 13:21:17 26 4
gpt4 key购买 nike

至少可以说我是一个业余爱好者,但是我做了一些基本的程序。无论如何,我正在制作一个DVD转换机器人。硬件方面已经构建,并且可以通过串行端口很好地工作。为了使该功能正常运行,我将必须首先制作一个多线程应用程序。

该应用程序将至少需要4个线程。 2个用于2个DVD刻录机,一个用于机械手控制,一个我正在调用导演,该导演将告诉其他3个线程该怎么做。

我的问题是在这些线程之间共享数据的最佳方法是什么。我一直在研究共享类和线程锁,但是我感到自己可能已经使事情变得复杂了。我知道我可以使用数据库来传递数据,并让每个线程每隔几秒钟检查一次数据库,但这对我来说并不像这样做的正确方法。

感谢您的建议。

最佳答案

您可以将所需的任何数据传递给Thread.Start()方法。基本上,这是在线程之间共享内容的首选方式。但是,从根本上讲,如果多个线程要访问其他线程也要访问的线程,则需要建立某种锁定机制以确保没有争用问题。

假设您在全局级别上有一个在线程之间共享的类实例:

(这是C#,但您知道了)

class GlobalData {

public string SomeProperty {get; set; }
public int SomeOtherProperty {get; set; }

}

如果有多个线程同时访问这些属性中的任何一个(或者期望值在调用之间保持一致)的情况将很麻烦。因此,最简单的方法是创建一个由线程负责的锁定机制:
class GlobalData {

public object Sentry = new object();

public string SomeProperty {get; set; }
public int SomeOtherProperty {get; set; }
}

在运行线程的代码中,您将执行以下操作(假设 g_Data是该类的实例):
void SomeMethodRunningOnAThread() {
lock (g_Data.Sentry) {
// do stuff
}
}

(在VB.NET中,相当于 lock的是 SyncLock)

这是确保您不会遇到争用问题的最简单方法。每个线程负责确保在访问对象的内容之前尝试对对象进行锁定。

除此之外,当然还有一些方法可以解决这个问题,例如在包含全局数据的类中实现锁定逻辑。它不会变得那么复杂,因此,如果最终要实现更复杂的内容,则无论如何都必须阅读。

关于vb.net - 在线程之间共享信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645385/

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