前段时间发生了一件有意思的事情:

我们这边向供应商采购了一件设备及一套对应的业务定制软件,合同也已签署完。

等到我们这边对接的时候,发现对方居然没还有做开发,详细了解后发现原来他们

需要拿到首付款后才能给我们开始开发。采购也挺有意思,大意是说合同我们都签

了,钱也不会差你们的,你们先弄出来,回头一起给你们。两方角力扯皮了几天,

最后供应商同意后退了一步,先给开发。为什么出现这个问题、以及谁对谁错,涉及

太多流程、规范,我也无法简单的评判到底谁对谁错,但是这个事情很有意思,

从形式上可以用 死锁 这个概念套一套。

产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求其他资源时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

进程的概念这里稍微变下名字,叫执行者。比如供应商、采购都是实际的执行者。

需要的资源也很明确:首付款、交付(或者说开发)软件。

破除死锁的方式,供应商先开发,一开始个人感觉这是破坏的必要条件2,看上去让对方

没有对预付款的诉求了。实际最终是解除了对首付款这个资源的依赖,破坏的是必要条件4

并没有让对方取消对预付款的要求,只是不会依赖什么时候能得到预付款这个资源了。