我对线程的经验不多,但在这个项目中,我需要一些线程来通过Com-Ports从SPS请求数据。
我有不同的线程运行,可能会发生2个甚至更多的线程想要访问相同的Com-Port,这当然不起作用。
现在我的问题是,我是否可以将变量值的被调用方法锁定为Com-Port的数量,而具有不同值的线程可以输入方法。
顺便说一句:我不能使用不同的变量作为"键"对于锁定,因为我从数据库中获取了值
我的代码可能如下所示:
<div>
<span>
<p class="sentiment">Sentiment</p>
</span>
<span>
<img src="https://storage.googleapis.com/gweb-uniblog-publish-prod/static/blog/images/google.a51985becaa6.png">
</span>
</div>
答案 0 :(得分:2)
我认为您最好的解决方案是创建一个包含myMethod的类,并为每个端口实例化它。
如果您不想这样做,您可以(例如)定义一个线程安全的锁字典
public static ConcurrentDictionary<int, object> locks = new ConcurrentDictionary<int, object>();
在开始你的线程之前初始化它:
for (int i=0; i < 10; i++)
{
locks[i] = new object();
}
并按端口号锁定:
lock(locks[portnum])
{
some code...
}
当然假设您知道myMethod上下文中的端口号(否则您将如何访问特定端口?)。