Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于图9-4的解释 #339

Closed
tigerinus opened this issue Jan 4, 2024 · 4 comments
Closed

关于图9-4的解释 #339

tigerinus opened this issue Jan 4, 2024 · 4 comments

Comments

@tigerinus
Copy link

客户 B 的最后一次读取(阴影条柱中)不是线性一致性的。该操作与 C 的 cas 写操作并发(它将 x 从 2 更新为 4 )。在没有其他请求的情况下,B 的读取返回 2 是可以的。

这句话不能完全理解:

  1. 既然“不是线性一致性的”,为什么后面又说“B 的读取返回 2 是可以的”?
  2. 什么叫“在没有其他请求的情况下”?“其他请求”指的是什么?
@yingang
Copy link
Collaborator

yingang commented Jan 4, 2024

按我的理解合并回答一下哈:

  1. 这里的其他请求是指图里Client A的第二次读取操作,该操作读取到了Client C的写入操作的结果(即将x从2改为4)
  2. 如果没有这个其他请求,Client B的最后一次读取操作和Client C的写入操作是并发的,读取到2或4都有可能,所以原文会说读取到2也是可以的
  3. 但因为已经有了这个其他请求,不管Client B和Client C的操作怎么并发,至少Client A已经看到了Client C的写入结果,那发生时间更晚的Client B读取操作也必须能看到这个结果,这样才能说满足线性一致性的要求

@tigerinus
Copy link
Author

按我的理解合并回答一下哈:

  1. 这里的其他请求是指图里Client A的第二次读取操作,该操作读取到了Client C的写入操作的结果(即将x从2改为4)
  2. 如果没有这个其他请求,Client B的最后一次读取操作和Client C的写入操作是并发的,读取到2或4都有可能,所以原文会说读取到2也是可以的
  3. 但因为已经有了这个其他请求,不管Client B和Client C的操作怎么并发,至少Client A已经看到了Client C的写入结果,那发生时间更晚的Client B读取操作也必须能看到这个结果,这样才能说满足线性一致性的要求

所以这个图只是说明了一种不符合线性一致性的反例,并不是说明如何保证线性一致性的机制,对么?

@yingang
Copy link
Collaborator

yingang commented Jan 4, 2024

所以这个图只是说明了一种不符合线性一致性的反例,并不是说明如何保证线性一致性的机制,对么?

嗯,我理解是的,具体如何设计和实现应该是后面的章节所讨论的内容。

@yingang
Copy link
Collaborator

yingang commented Jan 9, 2024

没有进一步的疑问,就先 close 这个 issue 了哈。

@yingang yingang closed this as completed Jan 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants