fileOne.bat多個批處理文件是否訪問/設置相同的共享/全局變量線程安全?
SET varTest=5
START fileTwo.bat
SET varTest=8
PAUSE
fileTwo.bat
ECHO %varTest%
是多個批處理文件訪問/設置相同的共享/全局變量 「線程安全」?
fileOne.bat多個批處理文件是否訪問/設置相同的共享/全局變量線程安全?
SET varTest=5
START fileTwo.bat
SET varTest=8
PAUSE
fileTwo.bat
ECHO %varTest%
是多個批處理文件訪問/設置相同的共享/全局變量 「線程安全」?
是的。 filetwo.bat
從fileone.bat
的環境副本開始。
這兩個過程是相當獨立的,因爲第二個文件是start
ed。他們不共享環境,因此fileone.bat
中的變量的變化從filetwo.bat
不可見,也沒有從fileone.bat
可見的filetwo.bat
的環境變化。
如果filetwo.bat
是從fileone.bat
而不是start
版call
版,然後filetwo.bat
需要fileone.bat
繼續之前完成。一旦fileone.bat
恢復,任何由filetwo.bat
所做的更改將在fileone.bat
的環境中可見。
如果您想在filetwo.bat
內使用setlocal
,則可以停止call
此行爲。在setlocal
前filetwo.bat
所做的任何更改將是可見的fileone.bat
,但setlocal
後所做的任何更改都將或回退時filetwo.bat
終止如果endlocal
指令中遇到(在隨後進行的任何更改將在fileone.bat
可見)
有兩個選項
兩個批處理文件相同cmd.exe
實例內運行:要做到這一點,正在等待對方結束批處理文件中的一個,因此,沒有任何的併發訪問到變量。
每個批處理文件都運行在不同的cmd.exe
實例中:每個實例都有自己的環境,因此沒有任何對該變量的併發訪問。
這意味着在讀取/寫入同一變量時沒有任何問題,因爲這不會發生。
謝謝Magoo和@ mc-nd。因爲隨機選擇答案,因爲你的兩個答案解決了我的問題。 – user7394862