同步是C++标准的内部概念吗?

qxgroojn  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(79)

除了这些在C++标准中定义的具有同步语义的操作之外,根据[intro.races]第10页,
求值A发生在求值B之前(或者,等价地,B发生在A之后),如果:

  • [...]
  • 线程间的操作发生在B之前。

如果满足以下条件,则线程间求值A发生在求值B之前

  • A与B,或

也就是说,在两个线程之间,如果AB重叠,则A发生在B之前。然而,同步是仅为C标准定义的内部概念吗?还是可以由其他文档定义的开放概念**换句话说,C标准是否赠款其他文档/平台或第三方库定义同步关系,以便它们进一步具有happens-before关系?**
我想问的是,第三个库是否可以为一个成对的操作指定同步,使得它们根据上面的定义具有happen-before关系?例如,在某些平台上,它提供了lockunlock,这不是C标准库的基础设施,但我们需要使用它们来防止该平台上的数据竞争,然而避免数据竞争取决于它们是否能建立happens-before关系,如果同步是C标准的内部概念,这将意味着我们不能使用任何第三方库。

ergxz8rk

ergxz8rk1#

在程序的语义中添加 synchronizes-with edges只能减少潜在执行的集合,因此实现可以在选择一个这样的潜在执行的过程中添加尽可能多的执行,以达到[intro.abstract]/6.2的目的。程序员招募的任意库没有这样的权限,就像它不能使用像“没有未定义的行为”([atomics.types.float]/8)这样的强大词汇一样。
当然,由实现来指定一个库是否是该实现的一部分,这样它就可以做像同步这样的事情;一个实现如此祝福一个机制,以至于它实际上没有在其优化中荣誉,这将是不一致的。

相关问题