我有一个有很多数据的数据类(电视节目表数据)。 从一侧查询数据并定期从另一侧更新。 有两个线程:第一个线程根据请求查询数据,第二个线程定期更新数据。 为防止锁定,我使用数据类的两个实例(副本):活动实例和备份实例。 最初,两个实例都填充了相同的数据。第一个线程只从实例中读取。 第二个线程定期更新两个实例,如下所示:如何在此模型中使用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