簡體   English   中英

在C#中實現多路復用器的硬件鎖定

[英]Realize hardware lock for multiplexer in C#

我們在系統中使用物理(解)多路復用器(時分,一個輸入,多個輸出)。

路由一個通道時,將執行一個動作(例如,在路由的連接上執行某些操作)。 在此操作期間,不允許其他人將多路復用器路由到另一個通道。

對於這種情況,我們目前使用如下的lock語句

public void DoSomething(Action action, int channel)
{
    lock(_lock)
    {
        _multiplexer.Route(channel);
        action();
    }
}

在這種用例中使用lock是否合適,還是有其他方法來處理鎖定硬件設備? 我經常讀

保持鎖緊

切勿在鎖內執行任意動作

這些規則在這種情況下適用嗎?

是的,這是對鎖的適當使用(與其他鎖定機制相反)。 但是,有些人可能會爭辯說,應該使用另一個跨進程類型鎖,例如命名的互斥鎖,因為如果可以啟動多個進程,則它們都可能同時訪問硬件,從而可能破壞數據。

“保持鎖緊”通常意味着您應確保在握住鎖時不要進行任何不必要的處理。 例如,如果您需要分配一些空間來放入數據,則通常可以在鎖之外進行。 第二條規則通常是避免死鎖。 例如,如果在傳遞給DoSomething的操作內部,代碼將鎖定另一個鎖,並且在某些情況下,其他代碼將在調用DoSomething之前訪問該鎖,如果這兩個代碼路徑恰巧同時運行,則您d具有死鎖(一個將持有此鎖並等待另一個,而另一個將持有另一個鎖並等待該鎖定)。 如果使用此代碼的開發人員有一定的紀律,即從不對任何操作執行任何鎖定或執行任何不必要的處理,則一切正常,但是,如果這樣做的話,那就大了。

如果可能的話,以某種方式對通道上可以完成的所有可能的操作進行編碼(將所有鎖都隱藏在實現中,並且在鎖處於鎖定狀態時不進行對外部代碼的調用),將更加安全(更好)。保持。 這樣,任何不了解內部原理的人都無法編寫導致死鎖的代碼。

暫無
暫無

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

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