如何调用每个线程一次函数

How to call a function once per thread

本文关键字:一次 函数 线程 何调用 调用      更新时间:2023-10-16

如何确保每线仅调用一次函数/方法?

i具有定期调用的函数,它必须在同一线程中只调用一次初始化方法。但是,如果另一个线程调用此功能,则必须为此新线程执行初始化,但仅一次。

是否有执行此操作的机制?
我有一个客户端/服务器实现:我的方法hello()由客户定期调用:

void ClassB::hello() {
InitFunction();
/* something to do */
}

在另一堂课中,我的initfunction看起来像:

void ClassA::InitFunction() {
initData();
/* other stuff */ 
}

initdata()必须仅通过线程调用一次。我想确保此功能仅称为一次(或一次initfunction())。我正在使用C 11。我已经检查了std :: call_once,但我认为它不能解决我的问题。

谢谢。

使用单身模式,其中单例存储在TLS(线程本地存储)中。

实际上是一个广泛的答案,因为您的问题也很广泛。TLS通常由您使用的运行时提供,因此要获得更好的答案,请显示您到目前为止所取得的成就,并告诉我们更多有关您的运行时/操作系统和编译器的信息。

相关文章: