簡體   English   中英

C#-鎖定變量值的方法(線程)

[英]C# - Lock method on value of variable (Threading)

我沒有太多線程處理經驗,但是在這個項目中,我需要一些線程來通過Com-Ports從SPS請求數據。 我運行的線程不同,可能會發生2個或更多線程想要訪問同一個Com-Port的情況,這當然是行不通的。
現在我的問題是,是否可以將被調用的方法鎖定在變量的值上,該變量的值應為Com-Port的編號,而具有不同值的線程可以輸入該方法。
順便說一句:我不能將不同的變量用作鎖的“鍵”,因為我是從數據庫中獲得值的。
我的代碼可能類似於以下內容:

Main()
{
   Start different Threads calling myMethod
}

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

我認為最好的解決方案是創建一個包含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上下文中知道端口號(否則如何訪問特定端口?)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM