Mar*_*n S 1 windows semaphore batch-file
我有一个通用的Windows构建批处理(即build.bat),它与不同的参数并行运行.
start build.bat device1
start build.bat device2
start build.bat device3
Run Code Online (Sandbox Code Playgroud)
但在该批处理中,有一个可执行文件在并行调用时崩溃.
使用Windows内置函数时,是否可以在已经在另一个批处理中运行时阻止此调用,并在完成另一个批处理时继续执行此操作?
假设该批次的内容是
start delay 5
Run Code Online (Sandbox Code Playgroud)
当多次调用批处理时,当另一个延迟当前正在运行时,延迟不得运行.
这与信号量类似.
所以我的目标是拥有这样的东西
CheckAndWaitIfDelayIsRunning
start delay 5
Run Code Online (Sandbox Code Playgroud)
提前致谢.
您可以使用a批量生成信号量lock by file.
:lock
2>nul (
> sema1.lock (
delay 5
REM The next line is for proper finishing the lock block
(call )
)
) || goto :lock
Run Code Online (Sandbox Code Playgroud)
诀窍是,只能在一次进程中写入sema1.lock.
任何其他进程都将失败并跳过内部块,|| goto :lock将重试,直到可以写入sema1.lock文件.
这种技术的一个缺点是消耗CPU,因为这个信号量不是真的等待,它更像是一个轮询信号量.
有关更多信息,请参阅SO:如何在Windows下共享日志文件?
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |