gpt4 book ai didi

C++ : How to count the number of threads used to call a function?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:23 26 4
gpt4 key购买 nike

我想知道有多少不同的线程在其生命周期内使用了一个对象函数。

我天真的方法是创建一个基类来注册调用线程的 id :

class threaded_object
{
public:
virtual ~threaded_object() {}

protected:
void register_call()
{
// error ! if the ID is reused, the new thread wont be accounted for.
callers_ids.insert(std::this_thread::get_id());
}

size_t get_threads_cout() const
{
return callers_ids.size();
}

private:
std::set<std::thread::id> callers_ids;
};

为了在我的客户端类中继承它,这里我将计算有多少线程使用了 foo()

class MyObject : public threaded_object
{
void foo()
{
register_call();
// ...
}
};

但它在一般情况下不起作用,标准在第 § 30.3.1.1 节中说

The library may reuse the value of a thread::id of a terminated thread that can no longer be joined

问题:

是否有一种便携且安全的方法来执行此操作?

最佳答案

我相信您可以使用线程本地存储来计算有多少线程调用了您的函数:

namespace {
thread_local bool used = false;
}


void register_call()
{
if( !used ) {
used = true;
++count;
}
}

当然这段代码只是为了展示这个想法,在实际代码中它可以是一个指向容器的指针,它包含感兴趣的函数的地址等。

关于C++ : How to count the number of threads used to call a function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24142110/

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