| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

利用 C++ 11 特性实现多线程计数器

许多并行计算程序,需要确定待计算数据的编号,或者说,多线程间通过编号而耦合。此时,通过利用C++ 11提供的atomic_?type类型,可实现多线程安全的计数器,从而,降低多线程间的耦合,以便于书写多线程程序。

以计数器实现为例子,演示了多线程计数器的实现技术方法,代码如下:

//目的: 测试利用C++ 11特性实现计数器的方法  //操作系统:ubuntu 14.04  //publish_date: 2015-1-31  //注意所使用的编译命令: g++ -Wl,--no-as-needed -std=c++0x counter.cpp -lpthread  #include <iostream>  #include <atomic>  #include <thread>  #include <vector>    using namespace std;    atomic_int Counter(0);  int order[400];    void work(int id)  {   int no;   for(int i = 0; i < 100; i++) {    no = Counter++;    order[no] = id;   }  }    int main(int argc, char* argv[])  {      vector<thread> threads;   //创建多线程访问计数器      for (int i = 0; i != 4; ++i)       //线程工作函数与线程标记参数          threads.push_back(thread(work, i));      for (auto & th:threads)          th.join();      //最终的计数值      cout << "final :" << Counter << endl;      //观察各线程的工作时序      for(int i = 0; i < 400; i++)    cout << "[" << i << "]=" << order[i] << " ";      return 0;  }

注意编译命令的参数,尤其,-lpthread

否则,若无该链接参数,则编译不会出错,但会发生运行时错误:

terminate called after throwing an instance of ‘std::system_error’
what():  Enable multithreading to use std::thread: Operation not permitted
已放弃 (核心已转储)

来源:alaclp的专栏

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1422791210501.html
C/C++开发 C/C++