【问题标题】:mutable boost::mutex is it possible to separate lock and wait functions?mutable boost::mutex 是否可以分离锁定和等待功能?
【发布时间】:2023-12-28 00:53:01
【问题描述】:

所以我有像read 这样可以从多个线程同时调用的函数。但我也有一个write 的函数,它需要锁定所有read 函数。在哪里可以获得创建这种架构的示例?

我知道我们可以拥有:

mutable boost::mutex the_read_mutex;
mutable boost::mutex the_write_mutex;

和:

void write()
{
    // make all new readers wait and wait for all other currently running read threads();
}

void read()
{
    // do not make all new readers wait, and wait for all currently running write thread()
}

那么怎么做呢?

【问题讨论】:

    标签: c++ multithreading boost mutex mutable


    【解决方案1】:

    你可以使用

    boost::shared_mutex  m
    
    Reader()
     shared_lock   lock(m)
    
    Writer()
     upgradeable_lock lck(m)
     upgrade_to_unique_lock uniqueLock(lck);
    

    要了解更多关于 boost-locks 的信息:Boost thread sync mechanisms

    要了解您正在处理的问题的类别:Wikpedia Link to Reader-WriterLock

    要了解更多关于 POSIX 读写锁的信息,它可以通过非常简单的语法直接为您提供读写锁:POSIX reader-witer locks

    【讨论】:

    • @kabumbus :这就是共享锁的原因。 :) 超过 1 个读者可以使用相同的 shared_lock 而不会被阻止。
    • @Kabumbus 读写锁实现背后的整个想法是允许读者并发访问,但如果任何作者需要访问,它必须等到所有其他读者或任何作者放弃对资源的所有权。此外,当作者拥有所有权时,读者和作者都不会被授予访问权限。
    • ...我在 boost 中没有看到 upgradeable_lock...=(