我有蝙蝠会在同一时刻启动X倍(使用不同的参数)。 我想他们修改一个特定的文件,但它的可控制延迟序列做。 理想情况下,我需要机制,只允许一个蝙蝠锁定文件,并为它的需要比释放它允许其他进程同样的事情,只要处理它。
Answer 1:
一些改进,杰布的答案。
有没有需要额外的锁定文件。 该queue.txt文件可以作为自己的锁。
而且,最里面的块必须被保证用SUCCESS(错误级别0)退出,从而当重定向失败的重试只发生。 (CALL )
注意空格)是清除任何错误完全非直观的,但非常有效的方式。 这里没有必要的,但(CALL)
注意空间不足)是设置错误的有效途径。
:lockedAppend
2>nul (
>>queue.txt (
REM Do any amount of processing within this block.
REM All stdout will safely be appended to the queue
REM You could even call out to a subroutine, or another batch file
echo Any text you want
REM The CALL below ensures that the block exits with ERRORLEVEL 0 - success
(call )
)
)||goto :lockedAppend
Answer 2:
它可以用一个文件锁,通过dbenham在描述进行并行处理与批量:Dostips和SO:你怎么有共享日志文件在Windows下? 。
作为窗口锁定在写入手柄打开的文件,对方尝试访问该文件将导致错误。
第一个进程可以访问该文件,并写入到它,第二个进程无法将其打开,将循环,直到第一个进程完成。
:lockedAppend
2>nul (
>queue.lock (
>>queue.txt echo All text I want
)
)||goto :lockedAppend
文章来源: Semaphore for CMD instances working in Parallel