gpt4 book ai didi

c++ - std::pmr::set_default_resource在多线程程序中不可用吗?

转载 作者:行者123 更新时间:2023-12-02 10:12:27 26 4
gpt4 key购买 nike

因此,我终于有了使用多态分配器的理由。
几乎立即,我发现了似乎是致命的设计缺陷:[mem.res.global]/3-7并没有直言不讳,但是该部分的标题和[mem.res.global]/6中有关同步的说明似乎暗示std::pmr::get_default_resourcestd::pmr::set_default_resource使用单个静态(即,不是thread_local)默认值内存资源指针。
我的阅读正确吗?如果是这样,考虑到在复制使用它们的容器时会考虑在整个地方隐式使用std::pmr::get_default_resource,那么如何在多线程程序中使用多态分配器呢?我是否只需要始终显式传递分配器?

最佳答案

我在想同样的问题。
我编写了一个简单的测试,其中两个线程按顺序更改/打印默认资源。

void task1 () {
std::pmr::monotonic_buffer_resource pool;
std::pmr::set_default_resource (&pool);
std::cout << "task1 pool: " << std::pmr::get_default_resource () << std::endl;
std::this_thread::sleep_for (std::chrono::milliseconds (1000));
std::cout << "task1 pool: " << std::pmr::get_default_resource () << std::endl;
}

void task2 () {
std::pmr::monotonic_buffer_resource pool;
std::this_thread::sleep_for (std::chrono::milliseconds (500));
std::pmr::set_default_resource (&pool);
std::cout << "task2 pool: " << std::pmr::get_default_resource () << std::endl;
std::this_thread::sleep_for (std::chrono::milliseconds (1000));
std::cout << "task2 pool: " << std::pmr::get_default_resource () << std::endl;
}
它指示默认资源是全局资源,而不是每个线程。
https://coliru.stacked-crooked.com/a/6dbe796556712089
结果:
 task1 pool: 0x7fdcc1ee6ea0
task2 pool: 0x7fdcc16e5ea0
task1 pool: 0x7fdcc16e5ea0
task2 pool: 0x7fdcc16e5ea0

关于c++ - std::pmr::set_default_resource在多线程程序中不可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63000116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com