当前位置:  开发笔记 > 编程语言 > 正文

GNU中相互排斥的作业调度make?

如何解决《GNU中相互排斥的作业调度make?》经验,为你挑选了1个好方法。

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

背景:

为了使这更具体,请考虑表单的makefile

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层深,所以我希望有一种方法可以做到这一点(一)不需要运行make串行和(b)保留的好处在makefile中编码依赖树.



1> Antti Huima..:

一个选项是使用"flock"在独占锁下运行"e"规则.有关详细信息,请参阅man flock(1).例如,而不是

e2: deps
    my_cmd foo bar

你可以有

e2: deps
    flock .embedded-device-lock -c my_cmd foo bar

然后会发生的是,所有"e"目标都由make并行(可能)启动,但实际命令将按顺序执行.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有