STL中boost::upgrade_to_unique_lock的等号是什么?

What is the equivalent of boost::upgrade_to_unique_lock in STL?

本文关键字:lock 是什么 to boost upgrade STL unique      更新时间:2023-10-16

我正在尝试用c++ 11中的STL功能替换boost功能。在我的多线程应用程序中有一个写函数。

首先,函数验证数据。接下来,写信给它。下面提到了两个锁:

class Data
{
    mutable boost::mutex mut;
    void Data::Write()
    {
        boost::upgrade_lock<boost::shared_mutex> ulock(mut);
        // ... Verification statements
        boost::upgrade_to_unique_lock<boost::shared_mutex> lock(ulock);
        // ... Writing statements
    }
};

我是boost功能的新手。你能解释一下它是做什么的,以及我如何用STL特性实现这个功能吗?

c++ 11根本不提供共享锁。c++ 14可以,但不允许它们升级为排他锁;您需要第二个互斥锁,例如:

mutable std::shared_timed_mutex read_mutex;
std::mutex write_mutex;
void Write() {
    std::shared_lock read_lock(read_mutex);
    // ... Verification statements
    std::lock_guard write_lock(write_mutex);
    // ... Writing statements
}

在获取写锁的同时还持有读锁,您需要小心一些,以避免死锁。如果您有一个有效的Boost解决方案,那么最好坚持使用它,直到标准库提供等效的功能。

在c++线程中:

#include <thread>
#include <mutex>
using namespace std;
mutex mu;
// lock_guard: acquire the mutex mu and lock it. when the lock_guard object goes out of scope, mutex is unlocked.
lock_guard<mutex> lock(mu);
// more flexible than the lock_guard
// http://en.cppreference.com/w/cpp/thread/unique_lock
unique_lock<mutex> ulock(mu);
ulock.unlock();
ulock.lock();