当前位置: 首页 > news >正文

C++多线程

线程:

async和thread

锁:

C++11中的std::atomic和std::mutex

推荐文章:

C++11 多线程(std::thread)详解_c++11线程使用-CSDN博客

c++ 标准库多线程 - 云山漫卷 - 博客园

std::lock_guard 是一个 RAII 风格的简单的锁管理器,它在构造时自动加锁,在析构时自动解锁。

#include <iostream>
#include <thread>
#include <mutex>
#include <vector>

std::mutex mtx;

void printNumber(int num) {
    std::lock_guard<std::mutex> lock(mtx);  // 自动加锁和解锁
    std::cout << "Number: " << num << "\\\\n";
}

int main() {
    std::vector<std::thread> threads;
    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(printNumber, i);
    }
    for (auto& t : threads) {
        t.join();
    }
    return 0;
}

条件变量(std::condition_variable)用于线程间的同步,允许一个线程等待另一个线程满足某些条件。

配合std::condition_variable::wait() 函数的第一个参数的必须是比lock_guard更灵活控制也更复杂重度的锁:std::unique_lock。它可以RAII自动析构,也可以手动lock/unlock,中间有的代码段就可以释放锁。手动把它unlock之后只是解锁,没有销毁,后续可以按需复用再次 lock/unlock。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

std::mutex mtx;          // 互斥锁
std::condition_variable cv; // 条件变量
bool ready = false;      // 共享状态标志

// 工作线程函数
void printMessage() {
    std::unique_lock<std::mutex> lock(mtx); // 获取互斥锁
    cv.wait(lock, []{ return ready; });      // 等待条件满足(避免虚假唤醒)
    
    // 此处执行需要同步的操作(当ready为true时)
    std::cout << "Message printed after condition met\n";
    // lock会自动释放(unique_lock析构时)
}

int main() {
    std::thread t(printMessage); // 创建并启动线程
    
    {
        std::lock_guard<std::mutex> lock(mtx); // 自动加锁
        ready = true;  // 修改共享状态
        // lock在此作用域结束自动释放
    }
    
    cv.notify_one(); // 通知一个等待线程
    t.join();        // 等待线程结束
    return 0;
}

相关文章:

  • 设计模式之代理模式:原理、实现与应用
  • IntelliJ IDEA新建文件配置作者信息、日期和描述等
  • FSC森林认证证书应用场景
  • python 数据可视化matplotib库安装与使用
  • 如何破解集运企业的劳动密集型困局,提高人效?
  • 10、STL中的unordered_map使用方法
  • Docker 离线安装教程
  • 2025-gazebo配置on vmware,wsl
  • 【练习】PAT 乙 1081 检查密码
  • 【Golang那些事】go1.22和1.23 更新重点及测评
  • nginx性能优化有哪些方式?
  • OpenNJet:下一代云原生应用引擎,支持动态配置与高效管理,简化运维任务,提升应用灵活性与安全性。
  • Sring Boot整合Minio实现图片上传功能
  • Web3 环境下用户数据隐私保护的技术方案分析
  • 【初学者】谈谈DeepSeek使用的算法?
  • 合法C标识符查(信息学奥赛一本通-1134)
  • 告别“人工智障”!给小米音箱“开个挂”?(接入各类AI大模型,让小爱同学秒变全屋智能AI中枢!)
  • 深入解析 Linux 声卡驱动:从架构到实战
  • 《深度学习》—— YOLOv1
  • 【Python数据分析+可视化项目案例】:亚马逊平台用户订单数据分析
  • 外企聊营商|波音速度:创新审批促“起飞”
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 区域国别学视域下的东亚文化交涉
  • “海豚音”依旧互动更多,玛丽亚·凯莉本周来沪开唱
  • 马鞍山市原常务副市长黄化锋一审获刑11年,涉案金额三千余万元
  • 普京提议于15日在土耳其恢复俄乌直接谈判