C++多线程

线程:

async和thread

锁:

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

推荐文章:

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

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

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

#include 
#include 
#include 
#include 

std::mutex mtx;

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

int main() {
    std::vector 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 
#include 
#include 
#include 

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

// 工作线程函数
void printMessage() {
    std::unique_lock 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 lock(mtx); // 自动加锁
        ready = true;  // 修改共享状态
        // lock在此作用域结束自动释放
    }
    
    cv.notify_one(); // 通知一个等待线程
    t.join();        // 等待线程结束
    return 0;
}

你可能感兴趣的:(C++,c++)