美文网首页
C++ shared_mutex

C++ shared_mutex

作者: 土豆吞噬者 | 来源:发表于2019-10-04 16:28 被阅读0次

    C++14提供了shared_mutex来解决读者-写者问题,也就是读写锁,和普通锁不一样,读写锁同时只能有一个写者或多个读者,但不能同时既有读者又有写者,读写锁的性能一般比普通锁要好。

    shared_mutex通过lock_shared,unlock_shared,shared_lock进行读者的锁定与解锁;通过lock,unlock,unique_lock进行写者的锁定与解锁。

    shared_mutex g_mutex;
    std::string g_str;
    
    void readLoop()
    {
        while (true) {
            this_thread::sleep_for(chrono::milliseconds(100));
            g_mutex.lock_shared();
            cout << g_str;
            g_mutex.unlock_shared();
        }
    }
    
    void writeLoop()
    {
        int number = 0;
        while (true) {
            this_thread::sleep_for(chrono::milliseconds(100));
            g_mutex.lock();
            g_str = to_string(number++)+"\n";
            g_mutex.unlock();
        }
    }
    
    int main()
    {
        thread(writeLoop).detach();
        thread(readLoop).detach();
        thread(readLoop).detach();
        system("pause");
    }
    
    
    class ThreadSafeCounter {
     public:
      ThreadSafeCounter() = default;
     
      // 多个线程/读者能同时读计数器的值。
      unsigned int get() const {
        std::shared_lock<std::shared_mutex> lock(mutex_);
        return value_;
      }
     
      // 只有一个线程/写者能增加/写线程的值。
      void increment() {
        std::unique_lock<std::shared_mutex> lock(mutex_);
        value_++;
      }
     
      // 只有一个线程/写者能重置/写线程的值。
      void reset() {
        std::unique_lock<std::shared_mutex> lock(mutex_);
        value_ = 0;
      }
     
     private:
      mutable std::shared_mutex mutex_;
      unsigned int value_ = 0;
    };
    

    相关文章

      网友评论

          本文标题:C++ shared_mutex

          本文链接:https://www.haomeiwen.com/subject/uqrspctx.html