多个批处理文件是否访问/设置相同的共享/全局变量线程安全



fileOne.bat

SET varTest=5
START fileTwo.bat
SET varTest=8
PAUSE

文件二.bat

ECHO %varTest%

多个批处理文件访问/设置相同的共享/全局变量是否"线程安全"?

是的。 filetwo.batfileone.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实例中运行:每个实例都有自己的环境,因此,对变量没有任何并发访问。

这意味着在读取/写入同一变量的同时没有任何问题,因为这不会发生。

相关内容

  • 没有找到相关文章