gpt4 book ai didi

scheduling - GNU make中的互斥作业调度?

转载 作者:行者123 更新时间:2023-12-04 02:27:32 25 4
gpt4 key购买 nike

使用 GNU make,是否可以创建一组在使用“--jobs”选项时永远不会被安排的目标?

背景:

为了使这更具体一点,请考虑以下形式的生成文件

p1: ...deps... # no parallelization conflicts (can run at the same time as p*, e*)
...rules...

p2: ...deps... # no parallelization conflicts (can run at the same time as p*, e*)
...rules...

p3: ...deps... # no parallelization conflicts (can run at the same time as p*, e*)
...rules...

e1: ...deps... # cannot run at same time as any other e*
...rules...

e2: ...deps... # cannot run at same time as any other e*
...rules...

e3: ...deps... # cannot run at same time as any other e*
...rules...

我需要做的主要事情是确保 e1、e2 和 e3 永远不会同时被处理,因为它们在资源有限的嵌入式设备上做一些工作。如果其中多个同时执行,它们就会崩溃。 p1、p2 和 p3 可以与任何事情并行执行,包括任何 e* 作业。

请注意,实际的 makefile 有几千个目标,其依赖树大约有 10 层深,所以我希望有一种方法可以做到这一点(a)不需要连续运行 make 并且(b)保留在 makefile 中对依赖树进行编码。

最佳答案

一种选择是使用“flock”在排他锁下运行“e”规则。有关详细信息,请参阅 man flock(1)。例如,代替

e2: deps
my_cmd foo bar

你可以有
e2: deps
flock .embedded-device-lock -c my_cmd foo bar

然后发生的是所有“e”目标都由 make 并行(可能)启动,但实际命令将串行执行。

关于scheduling - GNU make中的互斥作业调度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com