1
我有一個多線程運行上下文。我想要一個資源(比方說Object r)是互斥的。我可以將資源本身用作其監視器對象嗎?我可以使用資源本身作爲監視器來鎖定資源嗎?
例如
lock(r)
{
// do something...
}
我有一個多線程運行上下文。我想要一個資源(比方說Object r)是互斥的。我可以將資源本身用作其監視器對象嗎?我可以使用資源本身作爲監視器來鎖定資源嗎?
例如
lock(r)
{
// do something...
}
如果r
保持不變對象遍及 - 例如,r
是List
你是從多個線程添加項目:
lock (r)
{
r.Add("Hello world");
}
那麼,這是好的 - 它不會引起任何問題,你可以閱讀它,因爲你特別「鎖定r
」。 (只要確保你把一個類似lock
各地目前正使用r
過任何其他代碼。)
但是,如果r
正在切換爲另一對象lock
內:
lock (r)
{
r = new List<string>();
}
這ISN」 t是一個好主意,因爲最終可能會有兩個線程針對r
的兩個不同版本運行lock
。在這種情況下,您應該創建一個不變的object
專門用於鎖定 - 與「鎖定r
」相比,您更「鎖定代碼塊」。