ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++系列十:日常学习-多线程 [打印本页]

作者: 王海鱼    时间: 2023-9-6 12:49
标题: C++系列十:日常学习-多线程
TOC

介绍:

C++ 是一种支持多线程编程的编程语言,它提供了丰富的多线程支持来充分利用现代多核处理器的性能。
C++ 多线程编程通常使用标准库中的  头文件以及其他相关的标准库组件来实现。
理论:

案例:

[code]std::thread:join() //阻塞当前线程,直到目标线程执行完毕。detach() //将线程分离,使其成为后台线程,不再受到 join() 的控制。//创建互斥锁,并在访问共享资源之前进行锁定。std::mutex mtx;mtx.lock();   // 锁定互斥锁// 访问共享资源mtx.unlock(); // 解锁互斥锁//自动管理锁的生命周期,以确保在离开作用域时自动释放锁。std::mutex mtx;{    std::lock_guard lock(mtx); // 自动锁定和解锁    // 访问共享资源} // 离开作用域时自动解锁//条件变量用于在线程之间进行通信和同步。它们允许一个线程等待另一个线程发出的通知,以执行某些操作。std::condition_variable cv;// 线程1等待通知std::unique_lock lock(mtx);cv.wait(lock); // 阻塞线程1,直到收到通知// 线程2发送通知cv.notify_one(); // 通知线程1//原子操作:std::atomic counter(0);counter.fetch_add(1, std::memory_order_relaxed); // 原子递增操作//案例1:#include #include void myFunction() {    // 线程1执行的代码}void myFunction1(int value) {    // 线程2执行的代码}int main() {    std::thread t1(myFunction); // 创建新线程并启动    std::thread t2(myFunction1,100); // 创建新线程并启动    t1.join(); // 等待线程完成    t2.join(); // 等待线程完成    return 0;}//案例2:#include #include #include std::mutex mtx;void myFunction(int& counter) {    for (int i = 0; i < 1000; ++i) {        std::lock_guard lock(mtx); // 使用互斥锁保护共享资源        counter++;    }}int main() {    int counter = 0;    std::thread t1(myFunction, std::ref(counter));    std::thread t2(myFunction, std::ref(counter));    t1.join();    t2.join();    std::cout




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4