菜鸟笔记
提升您的技术认知

std::lock-ag真人游戏

std::unique_lock也可以提供自动加锁、解锁功能,比std::lock_guard更加灵活

 

#include 
#include        // std::cout
#include          // std::thread
#include           // std::mutex, std::lock_guard
#include       // std::logic_error
std::mutex mtx;
void print_even (int x) {
    if (x%2==0) std::cout << x << " is even\n";
    else throw (std::logic_error("not even"));
}
void print_thread_id (int id) {
    try {
        // using a local lock_guard to lock mtx guarantees unlocking on destruction / exception:
        std::lock_guard lck (mtx);
        print_even(id);
    }
    catch (std::logic_error&) {
        std::cout << "[exception caught]\n";
    }
}
int main(int argc, char *argv[])
{
    qcoreapplication a(argc, argv);
    std::thread threads[10];
    // spawn 10 threads:
    for (int i=0; i<10;   i)
        threads[i] = std::thread(print_thread_id,i 1);
    for (auto& th : threads) th.join();
    return a.exec();
}
网站地图