我需要根据我的函数中的参数创建unique_lock或共享锁。我无法在功能范围内正确定义。所以我需要做这样的事情。
function (bool check) {
lock;
if (check) {
lock = std::unique_lock<std::shared_mutex>(mutex);
} else {
lock = std::shared_lock<std::shared_mutex>(mutex);
}
lock.lock();
doTask....
答案 0 :(得分:2)
喜欢这个吗?
void function (bool check) {
std::unique_lock<std::shared_mutex> u(mutex, std::defer_lock);
std::shared_lock<std::shared_mutex> s(mutex, std::defer_lock);
if (check) {
u.lock();
} else {
s.lock();
}
doTask....
答案 1 :(得分:0)
由于调用者无论如何都要传递check
条件,您可以给function
一个模板参数让调用者指定要使用的锁类型,例如:
template<typename LockClass>
function () {
LockClass<std::shared_mutex> lock(mutex);
doTask....
}
//function (true);
function<std::unique_lock>();
//function (false);
function<std::shared_lock>();
否则,您可以将代码拆分为多个函数:
doTask() {
...
}
unique_function () {
std::unique_lock<std::shared_mutex> lock(mutex);
doTask();
}
shared_function () {
std::shared_lock<std::shared_mutex> lock(mutex);
doTask();
}