我有類似的東西在C#中的以下內容:.NET線程安全的緩存結果
private double _x;
private bool _xCalculated;
private double GetX() {
if (!_xCalculated) {
_x = ... // some relatively expensive calculation
_xCalculated = true;
}
return _x;
}
我的問題是,這是線程安全的?據我所知,最糟糕的結果是兩個或更多線程同時輸入此方法並多次計算_x
,但結果對於此類的任何實例都保證是相同的,所以這不是一個特別巨大的問題。
我的理解是否正確?
請避免使用鎖(此)。最好鎖定一個私人對象lockObject = new object();見http://www.toolazy.me.uk/template.php?content=lock(this)_causes_deadlocks.xml – 2010-11-23 12:26:43
並聲明不安全的是一個大膽的索賠,沒有給出這個說法的一些理由。 – CodesInChaos 2010-11-23 12:35:40