小编SSY*_*SSY的帖子

GCC之类的编译器如何为std :: mutex实现获取/释放语义

我的理解是std :: mutex锁定和解锁具有获取/释放语义,这将防止它们之间的指令被移到外面.

因此,获取/释放应禁用编译器和CPU重新排序指令.

我的问题是我看一下GCC5.1代码库,并没有看到std :: mutex :: lock/unlock中的任何特殊内容,以防止编译器重新排序代码.

我在do-pthread-mutex-lock-have-happen-before-semantics中找到了一个潜在的答案,表示一个外部函数调用充当编译器内存栅栏的邮件.

它总是如此吗?标准在哪里?

c++ multithreading gcc c++11

21
推荐指数
2
解决办法
1776
查看次数

为什么作用域枚举默认支持运算符'<'?

考虑:

enum class Number {one, two};

if (Number::one < Number::two)
{}
Run Code Online (Sandbox Code Playgroud)

我的理解是,scoped枚举需要被包装到底层类型或整数中,然后它可以应用于operator <> ==.但看起来上面的代码片段可以在没有任何显式重载运算符的情况下工作<.

我在枚举声明中没有看到任何描述.

C++标准说明默认情况下哪个运算符支持作用域枚举?

c++ enums

12
推荐指数
2
解决办法
920
查看次数

为什么嵌套绑定可以推迟对表达式的求值

[Effective modern C++]中的第34项给出了一个示例,嵌套绑定可以推迟对steady_clock::now()until的评估setAlarm. std::chrono::steady_clock::now实际上是一个static成员函数.我的理解是,只要它作为函数参数传递,它就会被评估.

任何人都可以帮助详细说明为什么可以延期?

auto setSoundB =
    std::bind(setAlarm,
        std::bind(std::plus<>(), steady_clock::now(), 1h),
        _1,
        30s);
Run Code Online (Sandbox Code Playgroud)

c++ c++11

3
推荐指数
1
解决办法
170
查看次数

标签 统计

c++ ×3

c++11 ×2

enums ×1

gcc ×1

multithreading ×1