我正在使用g++ (gcc)版本4.9.2下的ubuntu 64位14.04。我试图编译以下简单代码:
#include <iostream>
#include <atomic>
using namespace std;
int main() {
cout << "!World!" << endl; // prints !World!
return 0;
}
并获得以下错误:
/usr/include/c++/4.9/atomic:385:56: error: ‘noexcept’ does not name a
这不使用gcc 4.9.3编译(来自码头回购):
#include <memory>
#include <atomic>
int main() {
auto p = std::make_shared<int>(3);
auto n = std::atomic_load(&p);
}
若要使用gcc坞版进行测试(只需复制粘贴整个块):
docker run -it gcc:4.9 bash
# create a test.cpp with previous code:
cat > test.cpp << EOF
#i
我认为g++ 10.3应该支持原子shared_ptr的C++20特性吗?但我仍然收到以下错误
#include <atomic>
#include <thread>
#include <memory>
int main() {
std::atomic<std::shared_ptr<int>> a = std::make_shared<int>(1);
}
In file included from test.cc:1:
/usr/include/c++/10/atomic: In instantiation of
我有一个C库,它为原子操作定义了一系列特定于平台的宏。如何使用std::atomic作为实现?
例如,C代码有:
#define mylib_atomic_int_add(_pi, _val) do_atomic_int_add(_pi, _val)
int number = 0;
mylib_atomic_int_add(&number, 7);
C++平台抽象层(即与C代码链接的作为C++11编译的静态库)具有:
extern "C"
{
int do_atomic_int_add(volatile int* i, volatile int v)
{
我正在Linux上用C++开发一个程序。gcc的版本是4.5.1 20100924。我想在我的程序中使用std::atomic_int。我已经包含了原子头,如下所示:
include <atomic>
当我编译这个程序时,我得到了以下错误:
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../include/c++/4.5.1/bits/atomic_base.h:87:0,
from /usr/lib/gcc/x86_64-redhat-linux/4.
我试图在不修改 的情况下在C++应用程序中编写使用。它使用C11原子。
考虑下面的程序,我们可以将其放入一个名为main.cc的文件中。
#include "mpscq.h"
int main(){}
如果我用g++ -std=c++11 -c main.cc编译它,我会得到一个完整的错误集合,如下所示。
usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
typedef _Atomic __UINT_FAST32_TYPE__
在类构造函数中初始化std::atomic_flag的安全方法是什么?
似乎在问我同样的问题--除了这里,提问者在抱怨编译器的问题。
我的问题与C++标准本身有关。根据,未指定使用构造函数初始化器语法初始化std::atomic_flag。
std::atomic_flag static_flag = ATOMIC_FLAG_INIT; // static initialization,
// guaranteed to be available during dynamic initialization of static objects.
int main()
{
std::at
我有以下代码:
enum class State : uint32_t
{
FREE,
IDLE,
COAST,
MOVE,
STOP
};
std::atomic<State> car1_state = State::IDLE; <--- Line a
std::atomic<State> car2_state(State::IDLE); <--- Line b
以下是原子头文件的片段:
// c++ header file - atomic
template<typename _Tp>
st
根据我从和读到的内容,您可能认为volatile和并发编程是完全正交的概念,至少就C/C++而言是这样。
然而,在GCC的中,std::atomic的所有成员函数都有volatile限定符,在安东尼·威廉姆斯的 of std::atomic中也是如此。
那么,我的atomic<>变量是否需要为volatile呢?