std::once_flag和std::call_once

Aki 发布于 2023-11-09 393 次阅读


#include <iostream>
#include <thread>
#include <mutex>

std::once_flag flag;

void initialize_resource() {
    std::cout << "初始化资源" << std::endl;
    // 这里可以初始化资源,确保只被执行一次
}

void use_resource() {
    std::call_once(flag, initialize_resource);
    // 其他线程调用 use_resource() 时,initialize_resource() 只会执行一次
    std::cout << "使用资源" << std::endl;
}

int main() {
    std::thread t1(use_resource);
    std::thread t2(use_resource);
    t1.join();
    t2.join();

    return 0;
}