[英]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.