前述
对c++11的thread进行应用
尝试
1.两个线程交替打印字母
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
void printa(bool& flag, std::mutex& mtx, std::condition_variable& cv) {
for (;;) {
std::unique_lock<std::mutex> la(mtx);
// 利用条件变量控制unique_lock的加锁、解锁状态
// wait(unique_lock <mutex>&lck,Predicate pred)
// wait在pred返回为false时阻塞
cv.wait(la, [&](){return flag;});
std::cout << "a";
flag = !flag;
// 解除阻塞在等待的一个线程 如果有多个线程无法指定特定线程
// 当然这里也可以用cv.notify_all() 解除所有等待中线程的阻塞
cv.notify_one();
}
}
void printb(bool& flag, std::mutex& mtx, std::condition_variable& cv) {
for (;;) {
std::unique_lock<std::mutex> lb(mtx);
cv.wait(lb, [&](){return !flag;});
std::cout << "b";
flag = !flag;
cv.notify_one();
}
}
int main() {
bool f = true;
std::mutex mtx;
std::condition_variable cv;
std::thread a(printa, std::ref(f), std::ref(mtx), std::ref(cv));
std::thread b(printb, std::ref(f), std::ref(mtx), std::ref(cv));
a.join();
b.join();
return 0;
}
PREVIOUSgitalk配置
NEXTgolang与c++区别