我没有太多的线程经验,但在这个项目中,我需要一些线程请求数据从一个SPS通过Com-端口。我有不同的线程运行,可能发生2个或更多线程想要访问相同的Com-端口,当然,这是行不通的。
现在,我的问题是,是否可以将被调用的方法锁定在变量的值(即Com-Port的数目)上,而具有不同值的线程可以进入该方法。
顺便说一句:我不能使用不同的变量作为锁的“键”,因为我从数据库中获得值。
我的代码可能如下所示:
Main()
{
Start different Threads calling myMethod
}
myMethod()
{
lock on value of a Variable
{
some code...
}
}发布于 2017-02-13 12:38:48
我认为最好的解决方案是创建一个包含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上下文中的端口号(否则如何访问特定端口?)
https://stackoverflow.com/questions/42203897
复制相似问题