boost的原子操作

[cpp] view
plain
copy

  1. int a=0;
  2. std::cout<<a<<std::endl;
  3. boost::thread t1([&](){
  4. for (int cnt=0;cnt<100000;cnt++)
  5. {
  6. a+=1;
  7. }
  8. });
  9. boost::thread t2([&](){
  10. for (int cnt=0;cnt<100000;cnt++)
  11. {
  12. a-=1;
  13. }
  14. });
  15. t1.join();
  16. t2.join();
  17. std::cout<<‘\t‘<<a<<std::endl;

输出:

-3529

[cpp] view
plain
copy

  1. boost::atomic_int a(0);
  2. std::cout<<a<<std::endl;
  3. boost::thread t1([&](){
  4. for (int cnt=0;cnt<100000;cnt++)
  5. {
  6. a+=1;
  7. }
  8. });
  9. boost::thread t2([&](){
  10. for (int cnt=0;cnt<100000;cnt++)
  11. {
  12. a-=1;
  13. }
  14. });
  15. t1.join();
  16. t2.join();
  17. std::cout<<‘\t‘<<a<<std::endl;

输出

0

时间: 2024-09-17 21:17:03

boost的原子操作的相关文章

原子类型

http://book.51cto.com/art/201205/336658.htm 10.1.2  原子类型 前面我们看到,对于单线程上下文来说,我们可以对整型值简单地使用--和++.但是对于多线程,我们需要使用操作系统/架构原语.这种方式的缺点是即使我们将差异性抽象到一个公共的函数,例如integer_increment中,我们也要时时记住对某个整型值的所有原子操作都必须以该公共函数来完成.然而忘记其中之一是很容易的事情,一旦出现了这种情况,你就可能在应用程序中遭遇一个竞争条件,并且这种东

C++11开发中的Atomic原子操作

C++11开发中的Atomic原子操作 Nicol的博客铭 原文  https://taozj.org/2016/09/C-11%E5%BC%80%E5%8F%91%E4%B8%AD%E7%9A%84Atomic%E5%8E%9F%E5%AD%90%E6%93%8D%E4%BD%9C/ 主题 C++ 原子操作在多线程开发中经常用到,比如在计数器,序列产生器等地方,这类情况下数据有并发的危险,但是用锁去保护又显得有些浪费,所以原子类型操作十分的方便. 原子操作虽然用起来简单,但是其背景远比我们想象

[转]用汇编实现原子操作

原子操作(1) - 用汇编实现原子操作 "最轻量级的锁",通常也叫"原子操作",之所以加引号是因为他们在汇编级别并不是原子操作,是用多条指令完成的,这些操作大多都是利用CPU支持的汇编指令. 在某些构架过时的CPU体系结构上,它们应该是用比较重量级的线程内锁实现的吧(我的猜测). 最常见的原子操作有Compare and Exchange,Self Increase/Decrease等等. 1.80486 CPU相关指令: LOCK:这是一个指令前缀,在所对应的指令

c++ 原子操作

转载自: http://blog.csdn.net/yockie/article/details/8838686 所谓的原子操作,取的就是“原子是最小的.不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源.也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问.这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高. 在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借助

boost 无锁队列

一哥们翻译的boost的无锁队列的官方文档 原文地址:http://blog.csdn.net/great3779/article/details/8765103 Boost_1_53_0终于迎来了久违的Boost.Lockfree模块,本着学习的心态,将其翻译如下.(原文地址:http://www.boost.org/doc/libs/1_53_0/doc/html/lockfree.html) Chapter 17. Boost.Lockfree 第17章.Boost.Lockfree Ta

C++11中的原子操作

所谓的原子操作,取的就是“原子是最小的.不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源.也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问.这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高. 在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借助第三方的线程库,例如intel的pthread来实现.在新标准C++11,引入了原子操作的概念,并通过这个新的头文

Boost Lockfree

Boost Lockfree flyfish 2014-9-30 为了最大限度的挖掘并行编程的性能考虑使用与锁无关的数据结构来编程 与锁无关的数据结构不是依赖于锁和互斥来确保线程安全. Lockfree的重要操作就是CAS(Compare And Set)原子操作 原子操作就是多个线程访问同一个资源时,有且仅有唯一 一个线程对该资源进行操作 BOOST中的宏定义 BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B BOOST_ATOMIC_DETAIL_X86_HAS_C

Boost lockfree deque 生产者与消费者多对多线程应用

boost库中有一个boost::lockfree::queue类型的 队列,对于一般的需要队列的程序,其效率都算不错的了,下面使用一个用例来说明. 程序是一个典型的生产者与消费者的关系,都可以使用多线程,其效率要比使用上层的互斥锁要快很多,因为它直接使用底层的原子操作来进行同步数据的. freedeque.h 1 #pragma once#ifndef INCLUDED_UTILS_LFRINGQUEUE 2 #define INCLUDED_UTILS_LFRINGQUEUE 3 4 #de

C++ Boost库分类总结

c# 程序员写c++,各种不适应.尤其是被内存操作和几十种字符串类型的转换,简直疯了,大小写转换竟然要手动写代码实现. Boost看介绍不错,也不知道能不能跨平台.过几天要上linux写c++, 也不知道这东西能不能用. 转自: https://blog.csdn.net/svap1/article/details/80496489 按照实现的功能,Boost可为大致归入以下20个分类,在下面的分类中,有些库同时归入几种类别.字符串和文本处理库 a) Conversion库:对C++类型转换的增