STL 中 boost::upgrade_to_unique_lock 的等价物是什么?
What is the equivalent of boost::upgrade_to_unique_lock in STL?
我正在尝试用 C++11 中的 STL 功能替换增强功能。
我的多线程应用程序中有一个写函数。
首先,函数验证数据。接下来,写入它。
下面提到了两个锁:
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
}
};
我是增强功能的新手。您能否解释一下它的作用以及我如何使用 STL 功能实现功能?
在 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();
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++11 中的 STL 功能替换增强功能。 我的多线程应用程序中有一个写函数。
首先,函数验证数据。接下来,写入它。 下面提到了两个锁:
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
}
};
我是增强功能的新手。您能否解释一下它的作用以及我如何使用 STL 功能实现功能?
在 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();
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 解决方案,最好坚持使用它,直到标准库提供等效功能。