
C++多线程
文章平均质量分 76
C++多线程
~风起~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++多线程——原子操作(atomic)
所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。原子操作不需要加锁。原子类型对象的主要特点就是从不同线程访问不会导致数据竞争(data race)。原创 2024-12-02 19:58:10 · 256 阅读 · 0 评论 -
C++多线程——访问异步操作结果(future)和条件变量(condition_variable)
当std::condition_variable对象的某个wait函数被调用的时候,它使用std::unique_lock(通过std::mutex) 来锁住当前线程。当前线程会一直被阻塞,直到另外一个线程在相同的std::condition_variable对象上调用了notification函数来唤醒当前线程。condition_variable成员函数:condition_variable: 不可拷贝不可赋值;notify_one():唤醒一个等待的线程;原创 2024-12-02 19:55:54 · 492 阅读 · 0 评论 -
C++多线程——锁对象(lock_guard和unique_lock)
lock_guard和unique_lock都是RAII机制下的锁,即依靠对象的创建和销毁也就是其生命周期来自动实现一些逻辑,而这两个对象就是在创建时自动加锁,在销毁时自动解锁。所以如果仅仅是依靠对象生命周期实现加解锁的话,两者是相同的,都可以用,因跟生命周期有关,所以有时会用花括号指定其生命周期。但lock_guard的功能仅限于此。unique_lock是对lock_guard的扩展,允许在生命周期内再调用lock和unlock来加解锁以切换锁的状态。原创 2024-11-29 20:27:00 · 1228 阅读 · 0 评论 -
C++多线程——互斥量mutex
std::mutex 介绍下面以 std::mutex 为例介绍 C++11 中的互斥量用法。std::mutex 是C++11 中最基本的互斥量,std::mutex 对象提供了独占所有权的特性——即不支持递归地对 std::mutex 对象上锁,而 std::recursive_lock 则可以递归地对互斥量对象上锁。std::mutex 的成员函数1、构造函数,std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于 unlocked 状态的。原创 2024-11-29 20:18:33 · 1586 阅读 · 0 评论 -
C++多线程——线程
进程是一个具有独立功能程序的运行实体,如某一个程序,运行时便产生一个进程;通常一个进程包含一个或多个线程。普通C程序多是只含有一个线程的进程,但是大多数情况下遇到的是多线程的进程。(2). 初始化构造函数,创建一个 thread对象,该 thread对象可被 joinable,新产生的线程会调用 fn 函数,该函数的参数由 args 给出。线程与进程都是操作系统的概念。不同进程之间相互独立,同一进程的线程共享该进程的地址空间及其他资源。(1). 默认构造函数,创建一个空的 thread 执行对象。原创 2024-11-27 21:15:03 · 785 阅读 · 0 评论