C++ 学习
文章平均质量分 90
小猪佩奇TONY
求知若渴,虚心若愚
展开
-
C++ 多线程学习(3) ---- 条件变量
比如上面的代码中如果不加锁保护,在判断 mDisplayQueue.empty() 的条件成立后,此时线程被挂起,调度了另一个线程,另外的线程用于唤醒这个 condition_variable,此时当前线程因为还没有处于 wait 状态上(没有处于调度器的等待队列上),所以会丢失掉这个唤醒操作,如果这个唤醒操作只有一次,那么当前线程很可能永远处于阻塞等待的状态上。要解决该问题,就必须让生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。原创 2023-06-30 11:58:48 · 4105 阅读 · 0 评论 -
C++ 多线程学习(1) ---- 线程的创建
计算机术语中的并发,指的是单个系统里同时执行多个独立的活动,而不是顺序一个个执行,对于单核CPU来说,某个时刻只可能处理一个任务,但是它却不是顺序执行的一个个任务,而是对CPU进行分时复用,一直在任务之间切换,每个任务完成一部分就去执行下一个任务,看起来任务在并行发生,虽然不是严格意义上执行多个任务,但是我们仍然称之为。注意传递的参数的生命周期,传递的参数 temp,会在主函数执行完毕之后被回收,假设上面的线程使用的是线程分离的模式运行,打印出的 temp 将是错误的结果。原创 2023-06-14 15:53:13 · 713 阅读 · 0 评论 -
C++ 学习(1)---- 左值 右值和右值引用
C++11引入了右值引用,允许我们将右值绑定到引用上。这在。原创 2024-02-25 12:07:11 · 1067 阅读 · 0 评论 -
C++ 多线程学习(4) ---- 一道面试题的解法
C++ 多线程原创 2023-08-22 19:30:24 · 149 阅读 · 0 评论 -
C++ 多线程学习(2) ---- 竞争条件和互斥锁
在多线程编程中,多个线程可能同时访问和修改同一个变量,如果没有正确的同步机制,可能会导致数据竞争和不一致性等问题,原子变量提供了一种简单有效的方式来解决这个问题。2.unique_lock 可以进行临时上锁再加锁,如在构造对象之后使用 lck.unlock 就可以实现解锁,lck.lock 进行上锁,而不必等到析构的时候自动解锁,lock_guard 是不支持手动释放的。需要更加细粒度的控制,互斥锁可以提供更加细粒度的控制,允许锁定特定资源或者操作,原子变量一般用于单个变量的原子操作;原创 2023-06-28 19:49:12 · 144 阅读 · 1 评论