美文网首页
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