今天由于项目需求(其实是某门课的一个大作业,不好意思说出口啊。。。),想要使用多线程。相信大家一般用的是linux上的POSIX C或windows上的线程库,然而这些线程库以来于特定系统,并不“标准”。2011年发布的C++11标准中提供了并发执行的相关操作:

C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。

  • <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。<thread>:该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。
  • <mutex>:该头文件主要声明了与互斥量(mutex)相关的类,包括 std::mutex 系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。
  • <condition_variable>:该头文件主要声明了与条件变量相关的类,包括 std::condition_variable 和 std::condition_variable_any。
  • <future>:该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::future 和 std::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函数就声明在此头文件中。

std::thread 之"Hello world":

#include <iostream>
#include <thread>   // std::threadvoid thread_task() {//同其他线程库一样,返回值类型为voidstd::cout << "hello thread" << std::endl;
}int main(int argc, char *argv[])
{std::thread t(thread_task);t.join();//类似java里的start()return EXIT_SUCCESS;
}

编译时注意:加上-std=c++0x (新标准) -lpthread 因为GCC默认没有加载 pthread 库,我现在用的GCC4.6,也许以后的版本就不用这么麻烦了。

如果忘加-lpthread会提示:terminate called after throwing an instance of 'std::system_error'
             what(): Operation not permitted
             已放弃 (核心已转储)

可以写个makefile方便编译,一劳永逸:

all:myThreadCC=g++
CPPFLAGS=-Wall -std=c++0x -ggdb
LDFLAGS=-pthreadmyThread:myThread.o$(CC) $(LDFLAGS) -o $@ $^myThread.o:myThread.cc$(CC) $(CPPFLAGS) -o $@ -c $^.PHONY:cleanclean:rm myThread.o myThread

转载于:https://www.cnblogs.com/makefile/p/3798328.html

C++11之thread线程相关推荐

  1. C++11学习笔记-----线程库std::thread

    在以前,要想在C++程序中使用线程,需要调用操作系统提供的线程库,比如linux下的<pthread.h>.但毕竟是底层的C函数库,没有什么抽象封装可言,仅仅透露着一种简单,暴力美 C++ ...

  2. c++11中thread join和detach的区别

    线程状态: 在一个线程的生存期内,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状态还可以包含多个子状态,但大体来说,如下几种状态是通用的: 1)就绪:参与 ...

  3. [C++11 std::thread] 使用C++11 编写 Linux 多线程程序

    From: http://www.ibm.com/developerworks/cn/linux/1412_zhupx_thread/index.html 本文讲述了如何使用 C++11 编写 Lin ...

  4. Multi-thread--C++11中thread的使用

    C++11中加入了<thread>头文件,此头文件主要声明了std::thread线程类.C++11的标准类std::thread对线程进行了封装.std::thread代表了一个线程对象 ...

  5. [C++] - C++11 多线程 - Thread

    转载整理自:https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/tree/master/zh/chapter3-Thread 1 ...

  6. Qt使用 std::thread 线程插入数据到 QTableWidget

    Qt使用 std::thread 线程插入数据到 QTableWidget中 一.实现效果 二.主要代码 1. ThreadTable.h 头文件 2. ThreadTable.cpp 源文件 3. ...

  7. 11.定时任务定时线程池详解

    3.1 新增定时任务池 11.定时任务&定时线程池详解 ​ 当我们不用任务框架时,我们想自己写一个定时任务时,我们能想起那个工具类呢?Timer ?还有吗?不知道了,下面我们要讲下Schedu ...

  8. 在Android中使用Handler和Thread线程执行后台操作

    在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...

  9. Android中使用Thread线程出现的问题

    很多初入Android或Java开发的新手对Thread.Looper.Handler和Message仍然比较迷惑,衍生的有HandlerThread.java.util.concurrent.Tas ...

最新文章

  1. 11/1787, 哈工大小学妹的比赛上分经验,附战友招募
  2. 机器学习笔记十:各种熵总结
  3. mpvue还在维护吗_mpvue 微信小程序开发之生命周期
  4. Dockerfile常用指令
  5. git提交 本地分支和远程分支断开连接
  6. Bug提交规范及注意事项
  7. Win10系统任务栏无法自动隐藏问题
  8. Mysql的去重distinct
  9. 铁三角- 倒数348天
  10. cobaltstrike使用和巨龙拉冬9.0
  11. emacs terminal
  12. 过滤器把样式过滤掉,无法显示样式问题, 处理方法
  13. libapache2-mod-php5 apache,Debian Etch libapache2-mod-php5 with bundled libgd
  14. LOB字段相关概念(自动创建LOB索引段和重建索引方法)
  15. 阿里云DTS订阅实现实时运营服务的方案及注意事项
  16. 使用基本线条库进行码绘
  17. 【Unity】游戏打包
  18. 2019年回头看,英特尔要如何突破存储瓶颈?
  19. python \x0d\x0a \x0a
  20. NS3 seventh.cc为例说明Probe 一

热门文章

  1. JZOJ 5436. 【NOIP2017提高A组集训10.30】Group
  2. 持续集成mysql_持续集成环境搭建(5)zabbix搭建和使用
  3. sql if else语句_一道sql题学习if语句和case when语句
  4. 数据挖掘实验报告-关联规则算法实验
  5. 2021.02.03 Visual QA论文阅读
  6. 加载vue文件步骤_vue中.vue文件解析步骤详解
  7. android怎么关应用程序,如何关闭Android应用程序?
  8. JaveWeb学习之Servlet(二):ServletConfig和ServletContext
  9. linux命令学习之:curl
  10. 20170804 - 今日技能封装 - Q