首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量值(线程)的C#锁定方法

变量值(线程)的C#锁定方法
EN

Stack Overflow用户
提问于 2017-02-13 12:19:30
回答 1查看 1.4K关注 0票数 0

我没有太多的线程经验,但在这个项目中,我需要一些线程请求数据从一个SPS通过Com-端口。我有不同的线程运行,可能发生2个或更多线程想要访问相同的Com-端口,当然,这是行不通的。

现在,我的问题是,是否可以将被调用的方法锁定在变量的值(即Com-Port的数目)上,而具有不同值的线程可以进入该方法。

顺便说一句:我不能使用不同的变量作为锁的“键”,因为我从数据库中获得值。

我的代码可能如下所示:

代码语言:javascript
复制
Main()
{
   Start different Threads calling myMethod
}

myMethod()
{
   lock on value of a Variable
   {
      some code...
   }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 12:38:48

我认为最好的解决方案是创建一个包含myMethod的类,并为每个端口实例化它。

如果您不想这样做,可以(例如)定义一个线程安全的锁字典

代码语言:javascript
复制
public static ConcurrentDictionary<int, object> locks = new ConcurrentDictionary<int, object>(); 

在启动线程之前初始化它:

代码语言:javascript
复制
for (int i=0; i < 10; i++)
{
    locks[i] = new object();
}

并按端口号锁定:

代码语言:javascript
复制
lock(locks[portnum])
{
    some code...
}

当然,假设您知道myMethod上下文中的端口号(否则如何访问特定端口?)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42203897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档