【C++ 并发与多线程】std::thread类-多线程的基本用法

本文介绍了C++11中的多线程编程,包括std::thread的使用,如创建线程、等待线程、分离线程等。通过示例展示了以函数、函数对象、类成员函数和lambda对象创建线程的方法,并强调了线程安全和生命周期管理的重要性。
摘要由CSDN通过智能技术生成

什么叫并发 concurrency?

一遍走路一边说话;你打球我游泳

单核计算机上的并发是个假象,其实只是任务切换(task switching)需要上下文切换 
多处理器或一个处理器上有多个核上的并发才是自然的并发,叫硬件并发

åæ ¸ä¸å¤æ ¸å¹¶å示ä¾å¾

并发种类: 
1,多进程并发 
这些进程间可通过正常的进程通信渠道(信号,套接字,文件,管道等) 
缺点:1;通信建立较复杂或者慢;2;操作系统需要花时间启动进程和管理进程资源等 
优点:1;更容易写安全的并发代码比如Erlang语言 2;可以运行在不同的机器上 

è¿ç¨é´çº¿ç¨éä¿¡
2,多线程并发 
线程像轻量级的进程;每个线程互相独立,一个进程的所有线程分享同一个地址空间,多数数据可以共享,比如全局变量,指针和引用可以在线程间传递; 
优点:共享地址空间和没有数据保护使得使用多线程程序比多进程程序代价小 
è¿ç¨é´çº¿ç¨éä¿¡

 

C++11中引入了多线程编程,一般教科书中都没有涉及到这个概念,但是在工作中多线程却又是必不可少的。本文会展示最基本的Hello World, Concurrency程序。

C++11之后,多线程终于被支持了,C++开发者再也不需要借助boost等第三方库的力量,来实现跨平台的并行编程。语言层面上的支持,能够让开发者更加专注于业务逻辑,从而减少对系统平台的关注。C++11多线程的引入,让C++编程更加高效和简便。

最近一直研究多线程编程,忽然有感,如果我每掌握一个知识点,便分享出来,这比我蒙头死学更加高效。如果我的使用不正确,也有机会被指出来。所以便想整理网络或者书籍上所能学到的东西,写一个教程出来,力求能让刚入门不久的C++开发者,也能轻松的掌握并发编程的奥妙。

本教程不涉及太多原理性东西,需要那些知识的可以百度,或者买本《C++并发编程实战》,网路上或书籍里原理性的东西已经够多了,我想写的是让读者看完之后,能够很轻松的知道,该怎么用C++的多线程机制。其中,很多内容都是来自网路或者书籍上,感谢各位大神慷慨的分享。

如果没有特殊提及,本教程的所以代码都是基于Visual Studio 2015,如果更换其他编译器有可能无法运行。


Hello World

经典的Hello World式开端。

#include <iostream>
#include <thread>
void hello()
{
	std::cout << "Hello world, concurrency" << std::endl;
}
int main()
{
	std::thread t(hello);
	t.join(); // 没有这句话,会Debug Error的
	return 0;
}

-------------------------------------------
输出:
Hello world, concurrency
请按任意键继续. . .

这段代码很简单,如果用过boost多线程编程,那么应该对这个了如指掌了。首先包含线程库头文件<thread>,然后定义一个线程对象t,线程对象负责管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值