南宁网站推广手段怎么推广一个平台
线程:
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;
}