如何确保每个线程只调用一次函数/方法?
我有一个定期调用的函数,它必须在同一个线程中只调用一次Init方法。但是如果这个函数被另一个线程调用,它必须为这个新线程执行Init,但是只需要执行一次。
是否有执行此操作的机制?
我有一个客户端/服务器实现:客户端定期调用我的方法hello():
void ClassB::hello() {
InitFunction();
/* something to do */
}
在另一个课程中,我有一个类似于InitFunction:
void ClassA::InitFunction() {
initData();
/* other stuff */
}
initData()只能由线程调用一次。我想确保只调用一次这个函数(或者只调用一次InitFunction())。我使用的是c ++ 11。我已经检查了std :: call_once,但我不认为它解决了我的问题。
谢谢。
答案 0 :(得分:0)
使用Singleton模式,其中Singleton存储在TLS(线程本地存储)中。
实际上答案非常广泛,因为你的问题也相当广泛。 TLS通常由您正在使用的运行时提供,因此要获得更好的答案,请展示您到目前为止所取得的成就,并告诉我们有关您的运行时/操作系统和编译器的更多信息。