`
aigo
  • 浏览: 2644598 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

C++17 std::shared_mutex的替代方案boost::shared_mutex

阅读更多

std::shared_mutex

http://en.cppreference.com/w/cpp/thread/shared_mutex

 

GCC5.1才会支持C++17 std::shared_mutex,替代方案是boost::shared_mutex

 

boost::shared_mutex官方文档:http://www.boost.org/doc/libs/1_60_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_types.shared_mutex

 

需要的lib:

#pragma comment(lib, "libboost_chrono-vc140-mt-1_60.lib")
#pragma comment(lib, "libboost_date_time-vc140-mt-1_60.lib")
#pragma comment(lib, "libboost_system-vc140-mt-1_60.lib")
#pragma comment(lib, "libboost_system-vc140-mt-1_60.lib")
#pragma comment(lib, "libboost_thread-vc140-mt-1_60.lib")

 

 

boost::shared_mutex用法示例:

参考自:http://stackoverflow.com/questions/3896717/example-of-how-to-use-boost-upgradeable-mutexes

#include <boost/thread/locks.hpp>  
#include <boost/thread/shared_mutex.hpp>  

int
main()
{
    typedef boost::shared_mutex Mutex;
    typedef boost::shared_lock<Mutex> ReadLock;
    typedef boost::unique_lock<Mutex> WriteLock;
    Mutex mutex;

    {
        // acquire read lock
        ReadLock read( mutex );

        // do something to read resource
    }

    {
        // acquire write lock
        WriteLock write( mutex, boost::adopt_lock_t() );

        // do something to write resource
    }
}

 

 参考自:http://stackoverflow.com/questions/989795/example-for-boost-shared-mutex-multiple-reads-one-write

boost::shared_mutex _access;
void reader()
{
  // get shared access
  boost::shared_lock<boost::shared_mutex> lock(_access);

  // now we have shared access
}

void writer()
{
  // get upgradable access
  boost::upgrade_lock<boost::shared_mutex> lock(_access);

  // get exclusive access
  boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
  // now we have exclusive access
}

 

其他参考:

How to make a multiple-read/single-write lock from more basic synchronization primitives?

http://stackoverflow.com/questions/27860685/how-to-make-a-multiple-read-single-write-lock-from-more-basic-synchronization-pr

 

 

分享到:
评论

相关推荐

    数据库读写锁的C++实现

    为了进一步优化,C++17引入了`std::shared_lock`,它允许我们更优雅地处理读锁的获取和释放。例如,可以使用RAII(资源获取即初始化)风格来管理读锁: ```cpp void readAccess() { std::shared_lock&lt;std::shared_...

    C++实现线程锁

    当多个线程同时读取共享数据但写入操作是互斥的,`std::shared_mutex`(或旧版的`std::boost::shared_mutex`)可以提高效率。多个线程可以同时持有读锁,但写锁是互斥的。 ```cpp #include &lt;mutex&gt; std::shared_...

    Boost库/C++标准库使用手册

    5. **智能指针**:C++11 引入了 std::unique_ptr、std::shared_ptr 和 std::weak_ptr,这些智能指针替代了原始指针,以自动管理内存。 6. **并发编程**:C++11 引入了线程支持,如 std::thread、std::mutex 和 std:...

    当析构函数遇到多线程── C++ 中线程安全的对象回调 PDF

    - **更优的解决方案**:结合使用`boost::shared_ptr`和`boost::weak_ptr`来管理观察者模式中的对象引用,这样可以避免内存泄漏并确保线程安全。 #### 9. 共享智能指针`shared_ptr`和`weak_ptr` `boost::shared_ptr...

    read_exclusive_semaphore

    `std::shared_timed_mutex`是C++17引入的标准库,而`boost::shared_mutex`在C++17之前已经存在,是Boost库的一部分,它提供了读写锁的实现。下面是一个简单的使用示例: ```cpp #include &lt;mutex&gt; #include std::...

    Boost共享内存demo学习代码boost-1-80

    Boost库是C++社区开发的一个开源库,它提供了一系列高效、跨平台的工具,用于提升C++的功能性和表现力。在“Boost共享内存demo学习代码boost-1-80”中,我们关注的是Boost库中的Interprocess模块,该模块允许在不同...

    c++多线程实例1

    3. **线程通信**:C++17引入了`std::latch`和`std::barrier`,用于线程间的等待与同步。例如,`std::latch`可以用来等待所有线程完成某个任务: ```cpp #include #include std::latch latch(2); // 初始化为线程...

    c++线程测试文件

    C++线程测试文件主要涉及的是C++11及更高版本中引入的多线程编程概念,这是一个在现代计算机科学中至关重要的主题。C++线程库允许开发者创建和管理并发执行的任务,从而充分利用多核处理器的优势,提高程序的执行...

    C++实现线程

    C++11提供了多种同步原语,如`std::mutex`(互斥锁)、`std::condition_variable`(条件变量)、`std::atomic`(原子类型)等。例如,使用互斥锁保护共享资源: ```cpp std::mutex mtx; int shared_data = 0; ...

    C++11_14高级编程 Boost程序库探秘, 3rd,深入理解C++11,Effective+C,并发

    8. **智能指针(Smart Pointers)**:`std::unique_ptr`,`std::shared_ptr`和`std::weak_ptr`引入,为资源管理提供了更加安全的解决方案。 9. **并行算法(Parallel Algorithms)**:C++17中,`&lt;algorithm&gt;`库添加...

    ThreadDemo.zip 线程应用示例

    除了这些基本操作,C++还提供了线程局部存储(`std::thread_local`关键字),允许每个线程拥有其自己的变量副本,以及线程池(虽然不是标准库的一部分,但可以通过第三方库如Boost.Thread实现)等高级特性。...

    follow me to study modern c++.zip

    std::thread允许我们创建并管理线程,而std::mutex、std::lock_guard和std::condition_variable等工具则帮助我们实现线程安全的数据访问。了解原子操作(Atomic Operations)和std::atomic对于编写高性能的并发代码...

    Boost线程类

    Boost线程库是C++标准库的一个重要补充,它提供了多线程编程的支持。Boost库中的线程类(LPThread)允许开发者在C++程序中创建、管理以及同步线程,使得并行处理和并发执行变得更为简单。下面将详细介绍Boost线程类...

    boost_中文说明文档.rar

    Boost库是一个著名的C++库集合,它为标准模板库(STL)提供了许多扩展和补充。这个"boost_中文说明文档.rar"包含了关于Boost库的详细中文解释,旨在帮助开发者更好地理解和使用Boost库中的各种工具和组件。以下是...

    C++API文档

    7. **智能指针**:如`std::unique_ptr`, `std::shared_ptr`和`std::weak_ptr`,它们是C++11引入的内存管理工具,能够自动管理对象的生命周期,防止内存泄漏。 8. **并发编程**:C++11及以后的版本引入了线程支持,...

    optimizing_cpp_C++_

    13. **异步I/O**:使用C++17的std::async和std::future,或者Boost.ASIO,可以实现非阻塞I/O,提高I/O密集型应用的性能。 14. **CPU缓存优化**:了解缓存层次结构,设计数据结构和算法以减少缓存未命中,可以显著...

    C++-API函数大全.rar

    此外,C++ API还包括了异常处理(如`try`、`catch`、`throw`)、多线程(如`std::thread`、`std::mutex`)、同步(如`std::condition_variable`)等高级特性。 在实际开发中,除了标准库外,还经常使用第三方库,如...

    Boost程序库完全开发指南

    5. **Boost与C++标准库的关系**:Boost库经常被C++标准委员会作为参考,许多Boost组件最终被纳入C++标准库,如`std::tr1::shared_ptr`和`std::regex`。 通过阅读《Boost程序库完全开发指南》,开发者不仅能掌握...

    boost库的线程例子和互斥锁

    除了基本的互斥锁,Boost.Thread还提供了其他类型的锁,比如读写锁(`boost::shared_mutex`),允许多个读取者同时访问资源,但写入操作仍保持互斥。还有可取消的锁(`boost::mutex::scoped_lock`),当线程被异常...

Global site tag (gtag.js) - Google Analytics