原子读取+写入访问

时间:2010-07-08 19:33:32

标签: concurrency

在我正在处理的Web服务中,需要在后台更新用户的数据 - 例如,下拉并存储他们的推文。由于可能有多个服务器执行这些更新,我想确保只有一个服务器可以同时更新任何单个用户的数据。因此,(我相信)我需要一种进行原子读取的方法(用户已经被更新)和写入(不是吗?那么我将开始更新)。我需要避免的是:

  1. 服务器1发送请求以查看用户是否正在更新。
  2. 服务器2发送请求以查看用户是否正在更新。
  3. 服务器1收到回复,说明用户未更新。
  4. 服务器2收到回复,说明用户未被更新。
  5. 服务器1开始下载推文。
  6. 服务器2开始下载同一组推文。
  7. 疯狂!!!
  8. 步骤1和3需要组合成原子读取和写入操作,以便步骤2必须等到步骤3完成才能给出响应。是否有一种简单的机制可以有效地提供对多个服务器上某些内容的访问的“锁定”,类似于Java中的synchronized关键字(但显然分布在所有服务器上)?

1 个答案:

答案 0 :(得分:0)

看看Dekker的算法,它可能会给你一个想法。

http://en.wikipedia.org/wiki/Dekker%27s_algorithm