当前位置:嗨网首页>书籍在线阅读

12-锁定饿死和排队加锁请求的优先级

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

55.3.6 锁定饿死和排队加锁请求的优先级

当多个进程必须要等待以便能够在当前被锁住的区域上放置一把锁时,一系列的问题就出现了。

一个进程是否能够等待以便在由一系列进程放置读锁的同一块区域上放置一把写锁并因此可能会导致饿死?在Linux上(以及很多其他UNIX实现上),一系列的读锁确实能够导致一个被阻塞的写锁饿死,甚至会无限地饿死。

当两个或多个进程等待放置一把锁时,是否存在一些规则来确定在锁可用时哪个进程会获取锁?例如,锁请求是否满足FIFO顺序?规则跟每个进程请求的锁的类型是否有关系(即一个请求读锁的进程是否会优先于请求一个写锁的进程,或反之亦然,或都不是)?在Linux上的规则如下所述。

  • 排队的锁请求被准予的顺序是不确定的。如果多个进程正在等待加锁,那么它们被满足的顺序取决于进程的调度。
  • 写者并不比读者拥有更高的优先权,反之亦然。

在其他系统上这些论断可能就是不正确的了。在一些UNIX实现上,锁请求的服务是按照FIFO的顺序来完成的,并且读者比写者拥有更高的优先权。