fileOne.bat
SET varTest=5
START fileTwo.bat
SET varTest=8
PAUSE
文件二.bat
ECHO %varTest%
多个批处理文件访问/设置相同的共享/全局变量是否"线程安全"?
是的。 filetwo.bat
从 fileone.bat
的环境副本开始。
然而,这两个过程是相当独立的,因为第二个文件是start
编辑的。它们不共享一个环境,所以fileone.bat
中变量的变化在filetwo.bat
中是不可见的,对filetwo.bat
环境的任何变化在fileone.bat
中也是不可见的。
如果filetwo.bat
是从fileone.bat
call
而不是start
编辑的,则需要在fileone.bat
继续之前完成filetwo.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
实例中运行:每个实例都有自己的环境,因此,对变量没有任何并发访问。
这意味着在读取/写入同一变量的同时没有任何问题,因为这不会发生。