小编B.H*_*ong的帖子

g ++编译选项-std = c ++ 14编译错误显示Werror = c ++ 11-compat

我的环境Arch Linux,gcc 7.2

我正在学习C++并且我使用关键字constexpr来定义一个常量,而在编译时,它会给我一个错误消息
错误:identifier ‘constexpr’ is a keyword in C++11 [-Werror=c++11-compat]

我可以使用默认的g ++编译我的程序,但无法使用-std = c ++ 14和-Werror进行编译

我正在使用的命令是:

g++ -std=c++14 -O2 -Wall -Werror -Wextra -ansi -flto
Run Code Online (Sandbox Code Playgroud)

我认为该-Werror选项导致了这个问题.但是问题是什么?有人可以告诉我吗?

#include <iostream>

int main() {
    constexpr double yen_dollar = 0.107;
    std::cout << yen_dollar << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
test.cpp:4:5: error: identifier ‘constexpr’ is a keyword in C++11 [-Werror=c++11-compat]
     constexpr double yen_dollar = 0.107;
     ^~~~~~~~~
test.cpp: In function ‘int main()’:
test.cpp:4:5: error: ‘constexpr’ was not declared in this …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11 c++14

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

如果 bar() 和 foo() 互斥,如何在 foo() 中运行 bar()

我有两个函数,比如 foo() 和 bar(),我希望它们互斥,即在 bar() 运行时完全阻止 foo() 的运行或在 foo() 运行时完全阻止 bar() 的运行为线程安全而运行。

但是,我可能会在 foo() 内部调用 bar(),也就是说,当 foo() 在 foo() 内部调用 bar() 时,让 bar() 运行,但其他线程不会调用 bar()。

是否可以?如果是,你能提供大致的想法吗?

尝试在C中使用一个或多个互斥体,很容易使两个函数互斥,但是我不能在foo()中调用bar(),它们会进入死锁。

我不能在 foo() 内部调用 bar() 之前就解锁互斥锁,因为我不能保证下一个 bar() 运行是在 foo() 内部调用的那个。

我正在寻找一种解决方案,即 foo 将阻止 bar,如果它们在不同的线程中运行,bar 将阻止 foo。但是当 foo 在其主体内(同一线程)调用 bar 时,让 bar 运行。

谢谢

c multithreading synchronization pthreads thread-safety

0
推荐指数
1
解决办法
58
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

c++14 ×1

gcc ×1

multithreading ×1

pthreads ×1

synchronization ×1

thread-safety ×1