首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中编译器指令重排序的保证

C++中编译器指令重排序的保证
EN

Stack Overflow用户
提问于 2020-01-17 16:46:24
回答 1查看 73关注 0票数 0

给定的是以下函数foo

代码语言:javascript
复制
int x;
void foo()
{
    [...]
    x = 0x1234;
    cv.set();
    [...]
}

cv是一个非标准的条件变量,由我必须使用的外部API提供。这保证了C++标准给出,所以我可以肯定,x永远不会写在条件变量被设置之后。

条件变量当然在内部使用内存栅栏,但是由于实现在不同的转换单元中,编译器在foo编译期间无法知道这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-17 16:51:45

cv是一个非标准的条件变量.什么保证C++标准

没有。该标准不能保证根据定义属于标准范围之外的行为。如果cv没有(内部)使用C++标准认可的东西,那么这个标准就不能谈论它们的行为。

因此,您只有cv的制造者给您的保证,以及您的实现的保证。

话虽如此:

,因为实现在不同的翻译单元中,所以编译器在编译foo时不能知道这一点。

如果编译器看不到某些函数的实现,那么编译器如何知道它是在使用C++ condition_variable还是POSIX之类的东西呢?甚至一点都没有。

编译器不知道某些函数调用不会调用某个标准定义的同步机制,因此实现必须假设它调用了,并且避免以可能违反这种机制的方式重新排序指令。

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

https://stackoverflow.com/questions/59791607

复制
相关文章

相似问题

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