信号量CMD情况下并行工作(Semaphore for CMD instances working

2019-09-04 04:51发布

我有蝙蝠会在同一时刻启动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