2016-03-25 42 views
0

我可以定義lockObject像波紋管:可以將線程安全對象定義爲Readonly變量嗎?

private readonly object lockObject; 

還是應該玷污這樣的:

private object lockObject; 
+2

如果在初始化後永遠不需要寫入字段,那麼將其定義爲只讀。一個鎖對象將是一個不應該改變的事情的好例子。 –

+0

@GlorinOakenfoot謝謝,但是.net框架需要寫鎖對象嗎? – Fred

+1

但是你需要*創建*對象。通常你會寫:'private readonly object lockObject = new object();' – xanatos

回答

4

的99.99%的時間使用只讀

傳統上,你會希望有一個只讀對象作爲你的鎖,原因是鎖在變量lockObject上的對象上完成,如果你沒有使它只讀,並且它可能會變成一個案例鎖被放置在多個線程的不同對象上。

繼承人,可能會導致問題,而沒有使用只讀鎖定

  1. 線程A爭奪鎖定在lockObject
  2. 線程B一塞納里奧的一個很好的列表說明在lockObject
  3. 線程C-爭奪鎖定在的變化而變化lockObject,它與步驟1中的鎖不同

對於0.01%的時間

這是因爲某些原因你想改變你的鎖,也就是說你正在控制的資源訪問被改變了,但是仍然有線程在上一個資源上工作,並且你認爲他們當前的操作對你的程序,並且你不想等他們改變鎖定。 這又帶有警告,你可能不應該這樣做

相關問題