gpt4 book ai didi

c++ - 从第二次调用开始执行函数中的一段代码

转载 作者:行者123 更新时间:2023-11-28 07:26:47 25 4
gpt4 key购买 nike

如果我想在函数中运行一段代码,只能从函数的第二次调用开始,

问题:

  1. 这样做有什么问题吗?

  2. 我怎样才能做到这一点?使用静态变量是个好主意吗?

最佳答案

这个问题有两个答案,取决于你是否必须处理多线程序列化。

无线程:

void doSomething() {
static bool firstTime = true;
if (firstTime) {
// do code specific to first pass
firstTime = false;
} else {
// do code specific to 2nd+ pass
}
// do any code that is common
}

带线程:我将编写通用样板,但此代码是系统特定的(需要原子 compareAndSet 的某些变体)。

void doSomethingThreadSafe() {
static volatile atomic<int> passState = 0;

do {
if ( passState == 2 ) {
//perform pass 2+ code
break;
} else
if ( passState.compareAndSet(0,1) ) { // if passState==0 set passState=1 return true else return false
//perform pass 1 initialization code
passState = 2;
break;
} else {
//loser in setup collision, delay (wait for init code to finish) then retry
sleep(1);
}
} while(1);

//perform code common to all passes
}

关于c++ - 从第二次调用开始执行函数中的一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18638146/

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