缓存应用程序中的一致性

时间:2011-02-20 10:42:59

标签: multithreading caching concurrency

缓存一致性协议在硬件低级的多核上下文中是众所周知的,但是,我们将在应用领域中遇到类似的情况。最近,我正在开发一个项目,它有两个线程来更新共享对象。

  1. UI线程负责 显示和更新(通过用户 行动)对象。
  2. 后台复制线程 定期更新共享 对象,如果某些东西被改变了 其他用户。
  3. 由于我们有很多对象(50,000~100,000),每个线程必须将部分对象复制到自己的缓冲区中,更新共享对象是串行的。

    1. UI线程不会更新对象 每次用户更新时。
    2. 后台复制线程会 立即更新对象一次 找到更改,然后通知UI 线程刷新。
    3. 所以这就带来了一个问题,如果有一个对象由两个线程更新,那么冲突是如何解决的?处理这种情况有什么共同的习惯用法吗?

1 个答案:

答案 0 :(得分:0)

处理此问题的最简单方法是使用互斥锁。 UI在读取值之前锁定互斥锁,然后将其解锁。后台线程在更新值之前锁定互斥锁,然后将其解锁。

您可以让更新线程向UI发送通知消息,告诉它重新读取共享对象,如您所建议的那样。