![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c++11多线程
文章平均质量分 61
一些关于多线程的记录
一定会升职加薪
不会?没事!学就完了!
展开
-
shared_ptr和线程安全的问题
多线程读 shared_ptr 是安全的多线程无保护读写 shared_ptr 可能出现的 race condition(竞态条件)原创 2024-03-07 10:06:43 · 704 阅读 · 0 评论 -
异步并发:async ,future,packaged_task,promise
async是c++11引入的一个函数模版,用于异步执行的一个函数,并返回一个future对象,表示异步操作的结果,使用async可以方便的镜像异步编程,避免了手动创建线程和管理线程,下面是一个async的案例。原创 2024-03-01 10:55:47 · 306 阅读 · 0 评论 -
C++11:atomic原子操作
使其具备原子操作的特性。使用 std::atomic 声明的变量可以通过成员函数调用来进行原子操作,如加载(load)、存储(store)、交换(exchange)、比较与交换(compare_exchange_weak/compare_exchange_strong)等。使用 std::atomic 可以有效地确保对共享数据的正确性和一致性,避免数据竞争和并发问题,提供了一种可靠的方式来处理多线程环境下的并发操作。原创 2024-02-29 23:01:10 · 701 阅读 · 0 评论 -
c++11:跨平台线程池
它使用 C++11 标准库中的 std::thread、std::mutex、std::condition_variable、std::function 和 std::queue 等组件实现。原创 2024-02-28 22:54:27 · 497 阅读 · 0 评论 -
c++11多线程:condition_variable
这个版本的 wait() 函数与第一个版本相似,但增加了一个额外的条件判断。线程在等待期间会周期性地检查条件是否满足,只有当 pred 返回。这些参数的使用使得 wait() 函数可以根据特定的条件进行等待和唤醒,从而提供了更灵活的线程同步机制。需要注意的是,在调用 wait() 之前,线程必须已经获取互斥锁的所有权。lock:一个互斥锁(std::unique_lock。下面是一个简单的生产者-消费者模型的案例,其中使用了。在其他线程中需要通知等待的线程时,调用。函数通知等待的线程。原创 2024-02-28 11:00:12 · 952 阅读 · 0 评论 -
c++11多线程:call_once
通过输出的结果可以看到,虽然运行的三个线程中都执行了任务函数do_something()但是call_once()中指定的回调函数只被执行了一次,我们的目的也达到了。单例设计模式是一种常见的设计模式,用于确保某个类只能创建一个实例。由于单例实例是全局唯一的,因此在多线程环境中使用单例模式时,需要考虑线程安全的问题。是 C++11 标准库中的一个函数,用于确保某个函数只会被调用一次。原创 2024-02-27 17:57:00 · 571 阅读 · 0 评论 -
c++11多线程:lock_guard 与 unique_lock
尝试对互斥量进行加锁操作,如果当前互斥量已经被其他线程持有,则当前线程会被阻塞,直到互斥量被成功加锁,或者超过了指定的时间点。:尝试对互斥量进行加锁操作,如果当前互斥量已经被其他线程持有,则当前线程会被阻塞,直到互斥量被成功加锁,或者超过了指定的时间。:尝试对互斥量进行加锁操作,如果当前互斥量已经被其他线程持有,则函数立即返回 false,否则返回 true。:尝试对互斥量进行加锁操作,如果当前互斥量已经被其他线程持有,则当前线程会被阻塞,直到互斥量被成功加锁。当构造函数被调用时,该互斥量会被自动锁定。原创 2024-02-27 15:42:57 · 1034 阅读 · 0 评论 -
互斥量死锁
因为 T1 获取了 mtx1 的所有权,但是无法获取 mtx2 的所有权,而 T2 获取了 mtx2 的所有权,但是无法获取 mtx1 的所有权,两个线程互相等待对方释放互斥量,导致死锁。在上面的代码中,T1 先获取 mtx2 的所有权,再获取 mtx1 的所有权,而 T2 也是先获取 mtx2 的所有权,再获取 mtx1 的所有权,这样就避免了死锁问题。T1 先获取 mtx1 的所有权,再获取 mtx2 的所有权。都先获取 mtx1 的所有权,再获取 mtx2 的所有权,这样就可以避免死锁问题。原创 2024-02-22 14:04:17 · 559 阅读 · 0 评论 -
互斥量解决多线程数据共享问题
在多个线程中共享数据时,需要注意线程安全问题。如果多个线程同时访问同一个变量,并且其中至少有一个线程对该变量进行了写操作,那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃、产生未定义的结果,或者得到错误的结果。为了避免数据竞争问题,需要使用同步机制来确保多个线程之间对共享数据的访问是安全的。常见的同步机制包括互斥量、条件变量、原子操作等。以下是一个简单的数据共享问题的示例代码如图所示,结果是小于预计的200000的,因为线程在对变量累加的时候,变量的值已经被改变了,但是却拿到了没有被改变的值。原创 2024-02-22 11:30:41 · 507 阅读 · 0 评论 -
C++11 Thead线程入库函数为类的成员函数
并在函数中调用 privateFunc 函数。在创建线程时,需要将类对象的指针作为参数传递给线程。上面的代码中,将 myThreadFunc 定义为 MyClass 类的 *原创 2024-02-22 11:10:39 · 181 阅读 · 0 评论 -
C++11 Thead线程库的基本使用
要创建线程,我们需要一个可调用的函数或函数对象,作为线程的入口点。joinable()方法返回一个布尔值,如果线程可以被join()或detach(),则返回true,否则返回false。如果我们试图对一个不可加入的线程调用join()或detach(),则会抛出一个std::system_error异常。当我们创建一个线程后,我们可能需要等待它完成,以便获取线程的执行结果或执行清理操作。在第一个例子中,我们使用了一个字符串作为函数参数,传递给线程。需要注意的是,当我们使用引用传递参数时,我们需要使用。原创 2024-02-22 09:22:26 · 1067 阅读 · 0 评论 -
C++多线程 互斥锁
c++多线程互斥锁原创 2022-06-27 17:44:59 · 296 阅读 · 0 评论 -
c++11多线程概述
另外,一旦当前线程获得通知(notified,通常是另外某个线程调用 notify_* 唤醒了当前线程),wait()函数也是自动调用 lock(),使得对象的状态和 wait 函数被调用时相同。与std::condition_variable::wait() 类似,不过 wait_for可以指定一个时间段,在当前线程收到通知或者指定的时间 rel_time 超时之前,该线程都会处于阻塞状态。线程是轻量级的进程,每个线程可以独立的运行不同的指令序列,但是线程不独立的拥有资源,依赖于创建它的进程而存在,原创 2022-06-27 13:33:30 · 65 阅读 · 0 评论 -
进程间同步通信-生产者消费者模型
c++进程间同步通信-生产者消费者模式原创 2022-06-27 16:43:38 · 120 阅读 · 0 评论