gpt4 book ai didi

c++ - 使用 TBB 进行线程安全的惰性创建?

转载 作者:行者123 更新时间:2023-11-30 00:56:52 27 4
gpt4 key购买 nike

在我的 C++ 代码中,我保留了一个指向对象的指针应该延迟创建,即仅在请求时创建。我有以下代码,这显然不是线程安全的。

LAZY* get_lazy()
{
if (0 == _lazy)
_lazy = create_lazy();
return _lazy;
}

我想知道我应该在这里使用什么样的同步?我知道 Boost.thread 提供对一次性初始化的支持。但我希望有一个仅使用 TBB + C++ 的简单解决方案。我还应该注意到...

  • 我不能将 _lazy 创建为静态对象(我实际上想保留一个由此类延迟创建的对象组成的无界数组)
  • 这样的 LAZY 对象不能过度分配(创建非常昂贵)

最佳答案

您需要一个本地互斥量 (tbb::mutex),以确保您只创建一次惰性对象。

#include <tbb/mutex.h>

tbb::atomic<LAZY*> _lazy;
tbb::mutex myMutex;

LAZY* GetLazy()
{
if (0 == _lazy)
{
myMutex.lock();
if (0 == _lazy)
_lazy = create_lazy();
myMutex.unlock();
}
return _lazy;
}

关于c++ - 使用 TBB 进行线程安全的惰性创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344739/

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