我已經在多線程(在QT)工作,但我缺少深入的瞭解。我認爲運行時不會重複執行代碼。函數將保留在所有調用者或對象將用於調用它的恰好一個內存位置中。在多線程中,我讀到每個線程都有自己的堆棧,指令指針等等。比方說,我們有一個全球性的功能,翻譯成彙編算法是這樣的:爲什麼鎖是沒有必要的本地/堆棧變量在多線程
//GlobalFunction()
instruction 1 : move value 4 into accumulator
instruction 2 : add 5 to content of accumulator
instruction 3 : subtract 1 from content of accumulator
//some more stuff and function returns
//thread 1
call GlobalFunction()
//thread 2
call GlobalFunction()
現在也許線程的指令指針1點到指令3,而線程2獲得切片並執行指令1.此線程後1個執行指令3.不會累加器數據被破壞嗎?如果是這樣,那麼爲什麼僅使用非靜態局部變量的函數不需要在多線程環境中進行鎖定?
P.S:此外,我想一個指令是原子不是一組指令,所以實現可能出不來刷新寄存器中的數據到一些存儲位置執行另一個線程的指令之前的機會。
完全正確! –