c - 读者-作者问题,赋予读者更高的优先权
问题描述
我正在读一本书,它讨论了关于读者 - 作家问题的解决方案,该解决方案给予读者更高的优先级,其中作家离开其关键部分将始终重新启动等待的读者(如果存在)。以下是解决方案代码:
int readcnt; /* Initially = 0 */
sem_t mutex, w; /* Both initially = 1 */
void reader(void)
{
while (1) {
P(&mutex);
readcnt++;
if (readcnt == 1)
P(&w);
V(&mutex);
/* Critical section */
/* Reading happends */
P(&mutex);
readcnt--;
if (readcnt == 0) /* Last out */
V(&w);
V(&mutex);
}
}
void writer(void)
{
while (1) {
if (readcnt > 1) //<-----could it be readcnt == 1?
continue;
P(&w);
/* Critical section */
/* Writing happends */
V(&w);
}
}
我有两个问题:
Q1-if (readcnt > 1)
在write
方法中检查条件,条件可以是if (readcnt == 1)
?readcnt
如果有读者在等待并被阻止,我可以看到它总是一个。
Q2-continue
在writer
方法中跳过 while 循环(continue
, 代码可能需要跳过 100 次然后重新启动阅读器,理论上,这 100 个 wirter 可以选择一遍又一遍地重新启动,但每次都跳过就像无限循环一样,这对 cpu 资源来说是一个巨大的成本,是吗一种本机方法?
解决方案
推荐阅读
- reactjs - 当 CSS 使用 @import 时,Jest 失败
- ios - 在 react 应用程序上将 http 更改为 https 会使页面在 Safari 上的 iOS 上不断刷新
- sql - 当主键在sql中已知时,如何对特定单元格进行外键引用?
- xml - 从 xml 文件中获取属性值
- javascript - 在容器外单击时模态停止工作
- javascript - 如何从 JS 中的 JSON 键中获取值?
- python - 使用 Python:从 postgres DB 中提取表作为 CSV 文件并将当前日期列添加到 CSV 文件
- google-chrome - Chrome 72 在扩展的内容脚本中阻止 XHR
- python - 当我为测试准确性运行时出现“RuntimeError: Attempted to use a closed Session”
- tensorflow - 在 Keras 中使用嵌入层和 LSTM 作为输入的 3 维数组