jjzjj

stdatomic

全部标签

c++11 进程间原子和互斥锁

我有一个Linux程序,它产生多个进程(fork)并通过POSIX共享内存进行通信。我想让每个进程分配一个id(0-255)。我的意图是在共享内存区域(初始化为零)中放置一个位vector,然后原子地比较和交换位以分配一个id。有没有对c++11友好的方法来做到这一点?我可以创建一个原子位集吗?我可以跨进程使用互斥锁吗?如何确保构造函数在所有进程中被调用一次且仅调用一次? 最佳答案 C++11线程原语(互斥体、原子等)是线程原语。C++标准不引用进程,并且这些工具中的大多数不跨进程互操作。标准中唯一提到的过程是在一个非规范的符号中表

c++11 进程间原子和互斥锁

我有一个Linux程序,它产生多个进程(fork)并通过POSIX共享内存进行通信。我想让每个进程分配一个id(0-255)。我的意图是在共享内存区域(初始化为零)中放置一个位vector,然后原子地比较和交换位以分配一个id。有没有对c++11友好的方法来做到这一点?我可以创建一个原子位集吗?我可以跨进程使用互斥锁吗?如何确保构造函数在所有进程中被调用一次且仅调用一次? 最佳答案 C++11线程原语(互斥体、原子等)是线程原语。C++标准不引用进程,并且这些工具中的大多数不跨进程互操作。标准中唯一提到的过程是在一个非规范的符号中表

C++11 memory_order_acquire 和 memory_order_release 语义?

http://en.cppreference.com/w/cpp/atomic/memory_order和其他C++11在线引用资料,将memory_order_acquire和memory_order_release定义为:获取操作:否阅读在当前线程中可以在此加载之前重新排序。发布操作:否写道在当前线程中可以在此存储后重新排序。这似乎允许执行获取后写入之前获取操作,这对我来说也很奇怪(通常获取/释放操作语义限制所有内存操作的移动)。相同的在线资源(http://en.cppreference.com/w/cpp/atomic/atomic_flag)表明可以使用C++原子和上述宽松的

C++11 memory_order_acquire 和 memory_order_release 语义?

http://en.cppreference.com/w/cpp/atomic/memory_order和其他C++11在线引用资料,将memory_order_acquire和memory_order_release定义为:获取操作:否阅读在当前线程中可以在此加载之前重新排序。发布操作:否写道在当前线程中可以在此存储后重新排序。这似乎允许执行获取后写入之前获取操作,这对我来说也很奇怪(通常获取/释放操作语义限制所有内存操作的移动)。相同的在线资源(http://en.cppreference.com/w/cpp/atomic/atomic_flag)表明可以使用C++原子和上述宽松的

c++ - std::atomic<std::string> 是否正常工作?

我正在阅读AnthonyWilliams的“C++ConcurrencyinAction”和第5章,其中讨论了新的多线程感知内存模型和原子操作,他说:Inordertousestd::atomicforsomeuser-definedUDT,thistypemusthaveatrivialcopyassignmentoperator.据我了解,这意味着我们可以使用std::atomic如果以下返回true:std::is_trivially_copyable::value按照这个逻辑,我们应该不能使用std::string作为std::atomic的模板参数并让它正常工作。但是,以下代

c++ - std::atomic<std::string> 是否正常工作?

我正在阅读AnthonyWilliams的“C++ConcurrencyinAction”和第5章,其中讨论了新的多线程感知内存模型和原子操作,他说:Inordertousestd::atomicforsomeuser-definedUDT,thistypemusthaveatrivialcopyassignmentoperator.据我了解,这意味着我们可以使用std::atomic如果以下返回true:std::is_trivially_copyable::value按照这个逻辑,我们应该不能使用std::string作为std::atomic的模板参数并让它正常工作。但是,以下代

c++ - 我必须明确调用原子加载/存储吗?

C++11引入了std::atomic模板库。该标准规定了store()和load()以原子方式设置/获取多个线程共享的变量的操作。我的问题是赋值和访问操作也是原子的吗?即是:std::atomicstop(false);...voidthread_1_run_until_stopped(){if(!stop.load())/*dostuff*/}voidthread_2_set_stop(){stop.store(true);}相当于:voidthread_1_run_until_stopped(){if(!stop)/*dostuff*/}voidthread_2_set_stop

c++ - 我必须明确调用原子加载/存储吗?

C++11引入了std::atomic模板库。该标准规定了store()和load()以原子方式设置/获取多个线程共享的变量的操作。我的问题是赋值和访问操作也是原子的吗?即是:std::atomicstop(false);...voidthread_1_run_until_stopped(){if(!stop.load())/*dostuff*/}voidthread_2_set_stop(){stop.store(true);}相当于:voidthread_1_run_until_stopped(){if(!stop)/*dostuff*/}voidthread_2_set_stop

关于c:stdatomic(C11),关于_Atomic类型的三个问题

stdatomic(C11),threequestionsabout_Atomictypes第一个问题我在cppreference上找到的_Atomic(type-name)(自C11起)用作类型说明符;这指定了一个新的原子类型_Atomictype-name(2)(C11起)用作类型限定符;这指定了类型名称的原子版本。在这个角色中,它可能与const、volatile和restrict混合使用),尽管与其他限定符不同,type-name的原子版本可能具有不同的大小、对齐方式和对象表示。使用_Atomic(int)而不是_Atomicint也是如此保证它与int的大小相同吗?第二个问题在_At

关于c:stdatomic(C11),关于_Atomic类型的三个问题

stdatomic(C11),threequestionsabout_Atomictypes第一个问题我在cppreference上找到的_Atomic(type-name)(自C11起)用作类型说明符;这指定了一个新的原子类型_Atomictype-name(2)(C11起)用作类型限定符;这指定了类型名称的原子版本。在这个角色中,它可能与const、volatile和restrict混合使用),尽管与其他限定符不同,type-name的原子版本可能具有不同的大小、对齐方式和对象表示。使用_Atomic(int)而不是_Atomicint也是如此保证它与int的大小相同吗?第二个问题在_At