Questions tagged «happens-before»

2
Kotlin协程“事前发生”的保证?
Kotlin协程是否提供任何“事前保证”? 例如,mutableVar在这种情况下,对(可能)其他线程的写入和后续读取之间是否存在“先于后继”保证: suspend fun doSomething() { var mutableVar = 0 withContext(Dispatchers.IO) { mutableVar = 1 } System.out.println("value: $mutableVar") } 编辑: 也许还有其他例子可以更好地阐明这个问题,因为它更具Kotlin风格(可变性除外)。这段代码是线程安全的吗: suspend fun doSomething() { var data = withContext(Dispatchers.IO) { Data(1) } System.out.println("value: ${data.data}") } private data class Data(var data: Int)

1
“在此之前发生”是什么意思?
在C ++草案标准中多次使用“强烈发生于”这一短语。 例如:终止 [basic.start.term] / 5 如果具有静态存储持续时间的对象的初始化强烈发生在对std :: atexit的调用之前(请参见[support.start.term]),则对该函数的调用将传递给std :: atexit在调用对象的析构函数之前进行排序。如果对std :: atexit的调用强烈发生在具有静态存储持续时间的对象的初始化完成之前,则在调用传递给std :: atexit的函数之前对对象的析构函数的调用进行排序。如果对std :: atexit的调用在另一次对std :: atexit的调用之前强烈发生,则传递给第二个std :: atexit的函数的调用在传递给第二个std :: atexit的函数之前被排序。第一个std :: atexit调用。 并在 数据竞赛 [intro.races] / 12中定义 评估A发生在评估D之前,如果发生以下情况之一 (12.1)A在D之前排序,或 (12.2)A与D同步,并且A和D都是顺序​​一致的原子操作([atomics.order]),或 (12.3)对B和C进行求值,使得A在B之前排序,B仅发生在C之前,而C在D之前排序,或者 (12.4)有一个评估B,使得A强烈发生在B之前,而B强烈发生在D之前。 [注意:非正式地,如果A强烈地发生在B之前,那么在所有情况下A似乎都在B之前被评估。强烈发生在排除消耗操作之前。—尾注] 为什么引入“强烈发生”?直觉上,它与“之前发生的事情”有什么区别和关系? 注释中的“在所有情况下,似乎A在B之前都被评估”是什么意思? (注意:此问题的动机是Peter Cordes在此答案下的评论。) 标准报价附加草案(感谢Peter Cordes) 有序性和一致性[atomics.order] / 4 所有memory_order :: seq_cst操作(包括篱笆)上都有一个总顺序S,它满足以下约束。首先,如果A和B是memory_order ::: seq_cst运算,并且A强烈地发生在B之前,那么A在S中先于B.其次,对于对象M上的每对原子操作A和B,A的相干性在B之前,S必须满足以下四个条件: …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.