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