Я ищу идею сокращения кода.Я использую boost::scoped_lock
для блокировки boost::mutex
, но я хочу сократить объем кода, который я пишу.
В настоящее время у меня есть mutex
, определенный в моем классе, и поле члена с именем _sync
.Когда я хочу заблокировать, я должен написать:
scoped_lock<mutex> lock(_sync);
Хитрость в том, что это блокировка с ограничением, поэтому я предполагаю, что если я напишу статическую функцию для возврата scoped_lock, то она разблокируетсякак только он выйдет из области действия статической функции:
static scoped_lock<mutex> lock(mutex& sync)
{
return scoped_lock<mutex>(sync);
}
Такой подход позволит очень легко набрать:
public void Object::modify()
{
lock(_sync); // <-- nice and short! ;)
// do something to modify the object
//..
// the mutex is unlocked when we leave the scope of modify
}
Верно ли мое предположение?Сможет ли scoped_lock
немедленно разблокироваться, когда он будет возвращен моей статической функцией?