C++ 多线程

C++ 本身是个复杂的语言,要系统地学习 C++ 多线程知识可以阅读 这个项目

简单情况

#include <thread>
#include <iostream>
using namespace std;

int main() {
    int a = 0;
    auto l = [](int &a) {
        static mutex m;
        unique_lock<mutex> lock(m);
        for (int i = 0; i < 10000; ++i) ++a;
    };
    thread t1(l, ref(a));
    thread t2(l, ref(a));
    t1.join(), t2.join();
    cout << a << endl; // 20000
}

解决互斥/共享/条件变量 (C++11)

查阅 mutex, atomic, condition_variable 文档。

Future!

#include <iostream>
#include <future>
#include <thread>

int main() {
    std::packaged_task<int()> task([](){return 7;});
    std::future<int> result = task.get_future();
    std::thread(std::move(task)).detach();
    std::cout << "waiting...";
    result.wait();
    std::cout << "done!" << std::endl
              << "future result is " << result.get() << std::endl;
    return 0;
}

注:std::async 也能完成上述操作,区别是 async 无法指定由哪个线程来执行。

参考