執行一段代碼開始
回答
有兩個答案這個問題,這取決於您是否需要處理多線程序列化與否。
無螺紋:
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
}
添加一個全球計數器。 例如: -
static int counter = 0;
public void testFunc(){
if(counter==1){
........
<Execute the functionality>
........
}
counter++;
}
這不是唯一的方法,再加上它讓櫃檯在那裏讓別人篡改。計數器可以是函數內的一個「靜態」變量。哦,問題是標記爲C++。 – juanchopanza
然後做它的C++方式:) – Arun
在很多方面是錯誤的:1)公共虛擬? 2)不處理多線程問題,3)僅在第二次調用時執行,這不是OP的請求,4)計數器最終會翻轉,5)爲什麼初始化計數器的時間是1而不是0?初始化爲1很難說它計算的是什麼。 6)用'counter'這樣的名字來污染全局命名空間是個壞主意。 – Speed8ump
多線程將是一個問題。爲防止這種情況發生,如果需要,您可能需要類似mutex的東西。
像這樣:
void someFunction() { static bool firstRun = true; if (!firstRun) { // code to execute from the second time onwards } else { firstRun = false; } // other code }
- 1. python從哪裏開始執行代碼?
- 2. 執行的Java代碼peice的開始
- 3. 開始下載後執行代碼
- 4. 在後臺執行一段代碼
- 5. 每x分鐘執行一段代碼
- 6. iOS - 執行一段代碼10秒
- 7. 開關語句:執行代碼一次
- 8. 開始執行
- 9. 如何執行從特定代碼行開始的python文件?
- 10. 執行塊後執行塊中的一段代碼
- 11. 哪裏在片段中開始代碼?
- 12. 奇怪的代碼執行:執行在while循環的中間開始!
- 13. nhibernate開始執行
- 14. 開始未執行
- 15. 當x以y開始時執行代碼
- 16. 在方法開始之前執行代碼
- 17. 執行代碼的應用程序開始
- 18. Django初始化後執行代碼
- 19. 在EJB3.1中執行初始化代碼
- 20. 如何在顯示某個片段時執行一段代碼?
- 21. 在執行下一行代碼之前是否會執行一行代碼?
- 22. 如何在我的應用中輸入時始終執行一段代碼?
- 23. 這段代碼是如何執行的?
- 24. 分段錯誤,執行的代碼
- 25. 在pycharm中執行代碼段
- 26. 正確IDisposable的執行這段代碼
- 27. 這段代碼爲什麼執行?
- 28. 有條件地執行代碼段
- 29. 在類的開始處運行代碼
- 30. ERR!代碼ELIFECYCLE在運行NPM開始
一個普通的靜態是好的,除非你的函數是從多個線程中調用的。 – Peter