让我们考虑用户程序调用具有某些同步措施的系统调用的情况。最简单的例子是
rwlock_t lock; // let's assume it's initialized properly.
write_lock(&lock);
// do something...
write_unlock(&lock);
现在,当用户程序在锁定lock
之后但在释放之前终止时会发生什么,lock
永久锁定,我们不希望它发生。我们希望内核做的是巧妙地检测任何挂锁并相应地释放它们。但检测此类任务可能会产生过多的开销,因为系统需要定期记录并检查每个同步操作的每个任务。
或许我们可以将代码集中到另一个内核线程中并在那里执行同步工作。但是在另一个线程上调用仍然需要某种形式的同步,所以我认为不可能从用户程序中完全删除同步代码。
我已经对此进行了大量的考虑,并试图谷歌获取一些信息,但我看不出任何关于此的信息。任何帮助将非常感谢。谢谢。