线程(thread)
线程是程序执行中的单一顺序控制流,多个线程可以在同一个进程中独立运行。
线程共享进程的地址空间、文件描述符、堆和全局变量等资源,但每个线程有自己的栈、寄存器和程序计数器
并发(concurrency)和 并行(parallelism)
并发:多个任务在时间片段内交替执行,表现出同时进行的效果。
并行:多个任务在多个处理器或处理器核上同时执行
核心的注意点
通过头文件导入的呐: thread
提供的一些api有
std::thread 用于实现创建和管理进程
std::mutex 用于线程之间的互斥,防止多个线程同时访问共享资源
std::lock_guard std::unique_lock 用于管理锁的获取和释放
std::condition_variable 用于线程间的条件变量,协调线程间的等待和通知
std::feature 和 std::promise 用于实现线程间的值传递和任务同步
运行命令是:clang++ -std=c++11 -pthread threaddemo.cpp -o threaddemo
核心的使用模版是:
线程管理
join() 用于的是等待线程完成执行任务的吧。如果不调用 join() 或 detach() 而直接销毁线程对象,会导致程序崩溃。
detach() 将线程与主线程分离,线程在后台独立运行,主线程不再等待它。
线程调度时候的传值
值传递
引用传递
线程互斥和同步
在多线程编程中,线程同步与互斥是两个非常重要的概念,它们用于控制多个线程对共享资源的访问,以避免数据竞争、死锁等问题。
互斥量(Mutex)
互斥量是一种同步原语,用于防止多个线程同时访问共享资源。当一个线程需要访问共享资源时,它首先需要锁定(lock)互斥量。如果互斥量已经被其他线程锁定,那么请求锁定的线程将被阻塞,直到互斥量被解锁(unlock)。
核心使用的是:std::mutex 用于实现的是保护共享资源,防止数据之间的竞争吧
使用的步骤是: 1. 创建互斥锁 2. 锁定互斥锁 3. 释放互斥锁
一般是在多线程的环境前后进行加上锁的机制实现一些功能吧
锁类型区分
std::lock_guard 作用域锁,当构造时自动的锁定互斥量吧,当析构时自动解锁
std::unique_lock 与std::lock_guard类似,但提供了更多的灵活性,例如可以转移所有权和手动解锁
条件变量
std::condition_variable 条件变量用于线程间的协调,允许一个或多个线程等待某个条件的发生。它通常与互斥量一起使用,以实现线程间的同步。原子操作Atomic Operations
线程局部存储(Thread Local Storage, TLS)
线程通信
std::future 和 std::promise 实现线程间的值传递实现吧
消息队列就是基于 std::queue 和 std::mutex 实现简单的线程间通信的呐