我正在尝试用C ++ 11中的STL functinoalities替换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
}
};
我是推动功能的新手。您能否解释一下它的作用以及如何通过STL功能实现功能?
答案 0 :(得分:2)
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解决方案,最好坚持下去,直到标准库提供相同的功能。
答案 1 :(得分:0)
在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();