Есть ли какая-то причина, почему вы не можете сделать что-то подобное вместо этого? ИМО, это намного более чисто, чем перемещение замков от владельца к владельцу.
std::mutex my_lock;
void myFunc_locked() {
...do something that requires my_lock to be locked...
}
void myFunc() {
std::lock_guard<std::mutex> guard(my_lock);
myFunc_locked();
}
void myWrapper1() {
std::lock_guard<std::mutex> guard(my_lock);
...do something else that requires my_lock to be locked...
myFunc_locked();
}
void myWrapper2() {
...
myFunc();
}
Или сделайте так, как предложил @Nevin. Может быть, еще чище:
std::mutex my_lock;
void myFunc(std::lock_guard<std::mutex>> const& guard) {
...do something that requires my_lock to be locked...
}
void myFunc() {
std::lock_guard<std::mutex> guard(my_lock);
myFunc(guard);
}
void myWrapper1() {
std::lock_guard<std::mutex> guard(my_lock);
...do something else that requires my_lock to be locked...
myFunc(guard);
}
void myWrapper2() {
...
myFunc();
}