首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“同步操作完全有序”是什么意思?

“同步操作完全有序”是什么意思?
EN

Stack Overflow用户
提问于 2020-01-24 12:37:16
回答 1查看 368关注 0票数 5

我在实践中阅读Java并发性,在"16.1.3 Java内存模型( 500字以下)“中,它说:

Java模型是根据操作指定的,包括对变量的读和写,监视器的锁和解锁,以及线程的启动和连接。 JMM定义了一个名为发生的偏序,在程序内的所有操作之前。为了保证执行操作B的线程能够看到操作A的结果(无论A和B是否发生在不同的线程中),必须有一个发生--在A和B之间的关系没有发生的情况下--在两个操作之间排序之前,JVM可以随意地重新排序它们。

尽管动作只是部分有序,同步操作--锁定获取和释放,以及对易失性变量的读写--都是完全ordered.的,这使得描述发生在“后续”锁获取和读取易失变量方面是明智的。

关于“偏序”,我找到了thisthis,但我不太明白“尽管动作只是部分有序的,同步操作--锁定获取和释放,以及易失变量的读写--都是完全有序的。”“同步操作是完全有序的”是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-25 12:49:03

分析“同步操作完全有序”的语句:

  • "synchronization actions“是程序操作(Actions)的集合S (Actions)
  • 我们有一个相对于set S的关系R:它是发生之前的关系。也就是说,给定程序语句abaRb当且仅当a发生时-在a之前

然后声明说,"relation R是S上的“。

"relation R是完全超过S的“,意思是对于set S (使用a!=b)中的a,b的每两个操作,或者aRbbRa。也就是说,a发生在b之前,或者b发生在a之前。

如果我们将set S定义为在同一个锁对象X上执行的所有锁获取和锁释放的集合;那么set S是按发生前关系排序的完全a是由线程T1执行的锁X的获取,b是由线程T2执行的锁获取。然后任何一个a都会发生--在b之前(万一T1首先获得锁)。T1需要先释放锁,然后T2才能获得锁);或者b发生--在a之前(万一T2先获得锁)。

注:并非所有的关系都是合计的。

例如,关系<=是实数的总和。也就是说,对于每一对实数的a,ba<=bb<=a都是正确的。这里的总订单意味着,给定任何两个项目,我们总是可以决定哪个是第一个wrt。给定的关系。

但是关系P:“是人类的祖先”,并不是所有人类集合上的全部关系。当然,对于一些人类( a,b )来说,aPb (ab的祖先)或bPa (ba的祖先)都是事实。但是对他们中的大多数人来说,aPbbPa都不是真的;也就是说,我们不能用关系来决定哪一项是“第一”的(用系谱术语来说)。

回到程序语句--在relation R显然是部分之前--在all程序语句集上(如“示例的祖先”中):给定不同步操作a,b (在没有适当同步的情况下,由不同线程执行的任何操作),aRbbRa都不起作用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59896563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档