我有一個有很多數據的數據類(電視節目表數據)。 從一側查詢數據並定期從另一側更新。 有兩個線程:第一個線程根據請求查詢數據,第二個線程定期更新數據。 爲防止鎖定,我使用數據類的兩個實例(副本):活動實例和備份實例。 最初,兩個實例都填充了相同的數據。第一個線程只從實例中讀取。 第二個線程定期更新兩個實例,如下所示:如何在此模型中使用volatile關鍵字?
- 更新備份實例。
- 交換備份和活動實例(即備份實例成爲活動實例)。
- 更新備份實例。
- 備份實例和活動實例現在都是最新的。
我的問題是:我應該如何在這裏使用volatile關鍵字?
public class data
{
// Lots of fields here.
// Should these fields also be declared volatile?
}
我已經做了引用揮發性:
public volatile data live
public volatile data backup
volatile在多線程環境中幾乎沒用。 http://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/ – leppie 2010-08-23 12:53:23
@leppie該論文是關於C++中的volatile。雖然我也不傾向於在這裏使用volatile,但C#中的volatile不具有相同的語義。 – 2010-08-23 12:59:58
使用* volatile *會使其失敗更快。鎖是必需的。 – 2010-08-23 13:04:12