当我在同一个目录中运行两个忍者命令(第二个命令在第一个命令完成之前开始)时,它是如何工作的.它会导致未定义的行为吗



我想知道当我在同一目录中运行两个ninja命令(第二个命令在第一个命令完成之前开始(时,它是如何工作的。

第一个仍然在链接,但第二个正在重建第一个命令中的目标(可能正在使用(。

我没有看到暴力警告消息或错误,所以我想知道这是否会导致未定义的行为,或者无声地引入错误。

当我在同一目录中运行两个忍者命令(第二个命令在第一个命令完成之前开始(时,它是如何工作的。

两个进程同时运行-这是我们使用的多进程操作系统的正常操作。没有什么特别的。

也许你在问…-不,ninja中没有实现阻止并发执行的机制。

它会导致未定义的行为吗?

您必须定义该术语的含义。术语";未定义行为";通常用于C编程语言族的上下文中,这意味着在某些标准中行为是未定义的。

这里的行为将是竞争条件的结果——两个进程同时访问同一组文件,包括写入和读取。这没什么特别的。谁赢了谁先执行,谁是第一,谁是第二——有秩序,行为就是"定义的";在这种情况下,内核将在文件系统级别防止数据损坏,并且其中一个或另一个进程将赢得竞争,例如写入特定文件,

或静默地引入错误。

这在很大程度上取决于具体情况-实际发生了什么,构建系统是如何配置的,依赖关系是什么。如果第一个ninja编译x86体系结构,但第二个ninja交叉编译arm-none-eabi体系结构,则生成的文件集将不兼容。不兼容性可能更微妙,ergo可能会引入错误。

最新更新