【问题标题】:Readers-writer lock (writer preferred) implementation读者-作者锁(作者首选)实现
【发布时间】:2022-11-14 04:50:16
【问题描述】:

我已经阅读了 wiki 上的读者-作者锁 - https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock 但尝试只使用一个计数器和一把锁。

我很想知道这个实现是否有效。如果是,您认为这足以进行技术面试吗?

            read() {
                lock g;
                while (num_of_writers > 0) {
                    g.wait(); // always yield to writers
                }
                doRead();
                unlock g;
            }

            write() {
                lock g;
                numOfWriters++; // let all the writers to queue up here
                unlock g;

                lock g;
                doWrite();
                num_of_writers--;
                g.notify();
                unlock g;
            }



【问题讨论】:

    标签: multithreading concurrency synchronization semaphore


    【解决方案1】:

    您的实现看起来正确地实现了一个有效的锁,但它确实不是可靠地优先考虑作者(如您的标题中所述)。

    特别是,假设doWrite() 是一个长时间运行的操作,当前正在使用num_of_writers==1 执行。在其执行期间,许多新的读取器和写入器线程到达read()write() 调用。当前写入者解锁g 时,可能有多个写入者在他们的第一个lock g 语句排队,但这些写入者的优先级不高于在lock gg.wait() 排队的读取者。事实上,根据notify/wait 条件变量的实现,g.wait() 的读者实际上可能会获得优先权。

    此外(也许是最重要的),此代码不允许并发读取(doRead()g 的关键部分内执行),因此从技术上讲,这甚至不是读写锁。

    Wrt 技术面试,给能在几分钟内说出这些缺陷的人打分,然后雇佣能修复它们的人 ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多