首页 > 解决方案 > 读者-作者问题,赋予读者更高的优先权

问题描述

我正在读一本书,它讨论了关于读者 - 作家问题的解决方案,该解决方案给予读者更高的优先级,其中作家离开其关键部分将始终重新启动等待的读者(如果存在)。以下是解决方案代码:

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-continuewriter方法中跳过 while 循环(continue, 代码可能需要跳过 100 次然后重新启动阅读器,理论上,这 100 个 wirter 可以选择一遍又一遍地重新启动,但每次都跳过就像无限循环一样,这对 cpu 资源来说是一个巨大的成本,是吗一种本机方法?

标签: cmultithreading

解决方案


推荐阅读