前言
个人想了解这块内容,文章中所提及的,来源于 chatGPT, 若后面了解的过程中发现其所表述有误的话,再做修正吧。
多线程的基本概念
在计算机中,线程是进程中的一个执行单元。一个程序可以由多个线程组成,线程间共享程序的资源(例如内存),但每个线程有自己的执行路径。通常,会创建多个线程并发执行不同的任务,从而实现并行计算。
线程的基本结构:
• 进程:一个运行中的程序,每个进程有自己的地址空间、资源等。
• 线程:进程中的最小执行单元,每个线程有自己的栈空间,多个线程共享进程的资源(例如内存、文件描述符等)。
创建线程
C++11引入了对多线程的支持,提供了
|
解释:
• std::thread t(hello);
:创建一个线程t,并让它执行hello函数。
• t.join();
: join()方法用于等待线程执行完毕。如果没有调用join()或detach(),程序可能会在主线程结束时直接退出,导致子线程未执行完毕。
线程同步与共享数据
多个线程同时访问共享数据时,会发生数据竞争
,即多个线程同时修改数据,导致不一致的结果。因此,需要使用同步机制来避免这种情况。
使用mutex进行同步
C++提供了std::mutex
来保证同一时刻只有一个线程能够访问共享资源。
|
线程的常见操作
detach
detach():
将线程与主线程分离,主线程退出时,分离线程将继续执行。
std::thread t(hello); |
线程的返回值
可以让线程返回结果,可以通过std::future
和std::promise
实现。
|
std::async():
异步启动一个线程来执行add函数,并返回一个std::future
对象,稍后可以通过result.get()获取返回值。
总结
• 创建线程:使用std::thread类。
• 线程同步:使用std::mutex来保护共享资源。
• 线程间通信:使用std::future和std::promise来实现线程之间的通信和获取返回值。
• 线程生命周期管理:使用join()等待线程结束,detach()让线程与主线程分离。
参考
[1] chatGPT