windows - 实现多线程时,批处理文件中的 ".lock"有什么用?

标签 windows multithreading batch-file cmd

这是代码。由于我是批处理脚本的新手,我无法理解为什么使用 .lock 以及为什么它小于等于 9

set "lock=%temp%\wait%random%.lock"

start "" cmd /c 9>="%lock%1" abcd.bat 4441 %tempdate%

start "" cmd /c 9>="%lock%2" pqrs.bat 4442 %tempdate%

for %%N in (1 2 3 4 5 6 7 8 9) do (

        9>="%lock%%%N" || goto :Wait

) 2>nul

最佳答案

9> 不是比较表达式,它是输出流 9 的重定向。
语法 9>= 是无意义的,因为 = 在这里没有任何意义,因为它将被删除。

输出流 9 通常不存在,输出将是空文件“wait1000.lock1”和“wait1000.lock2”(假设 %random% 在这种情况下为 1000)。

FOR 循环简单地测试它是否可以写入同一个文件,这将被阻塞,直到批处理文件退出并释放写锁。
当至少一个文件被锁定时,命令 9>"%lock%%%N" 失败,然后 goto :wait 将被执行。

顺便说一句。示例文件中缺少标签 :Wait
它应该在 FOR 循环之前插入

关于windows - 实现多线程时,批处理文件中的 ".lock"有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40584134/

相关文章:

windows - 有没有办法减少与进程外 COM 调用相关的开销?

windows - 如何防止 IIS 7.5 缓存符号链接(symbolic link)内容?

java - 如何在批处理文件中包含 JAR 文件

batch-file - 无法连接以逗号分隔的字符串

windows - 批处理文件 : start at high priority with cmd blocked

windows - MobaXterm 在每个新打开的选项卡上打开一个黑色 (cmd) 窗口 moxt2.exe

c++ - FindFirstFile/FindNextFile API 对缓存结果是否返回?

c - C 语言中有 void operator() () 吗?

.net - 将事件与ThreadPool.RegisterWaitForSingleObject一起使用是否安全?

java - 在另一个线程中使用线程是一种好习惯吗?