Разница между mutex.timed_lock (duration) и boost :: timed_mutex :: scoped_lock scoped_lock (mutex, длительность)

Я хотел бы знать, в чем разница между:

boost::timed_mutex _mutex;
if(_mutex.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(10))){
exclusive code
_mutex.unlock();
}

а также

boost::timed_mutex _mutex;
boost::timed_mutex::scoped_lock scoped_lock(_mutex, boost::get_system_time() + boost::posix_time::milliseconds(10));
if(scoped_lock.owns_lock()) {
exclusive code
}

Я уже знаю, что scoped_lock делает ненужным вызов для разблокировки. Мой вопрос касается:

  1. Почему в первом случае мы называем timed_lock функцией-членом
    мьютекс и во втором мы строим замок из мьютекса и
    продолжительность.
  2. Какой из них более эффективен?
  3. Использование boost :: posix_time нормально или рекомендуется использовать другой вид,
    например хроно или длительность?
  4. Есть лучший способ (быстрее)
    получить блокировку на время ‘x’, чем указанные выше два метода?

1

Решение

Я постараюсь ответить на ваши вопросы:

  1. как вы можете прочитать в этом Документ, блокировки используются в качестве устройств RAII для заблокированного состояния мьютекса. То есть замки не владеют мьютексами, на которые они ссылаются. Они просто владеют замком мьютекса. в основном это означает, что вы получаете блокировку мьютекса при инициализации соответствующей блокировки и освобождаете ее, когда объект блокировки уничтожен.
    вот почему во втором примере вам не нужно было вызывать timed_lock из мьютекса, scoped_lock делает это для вас при инициализации.
  2. Я не знаю, является ли первый пример более эффективным, но я точно знаю, что второй пример (RAII scoped_lock) намного безопаснее, он гарантирует, что вы не забудете разблокировать мьютекс, и, что более важно, он гарантирует, что другие люди, которые используют и модифицируют ваш код, не вызовут проблем, связанных с мьютексом.
  3. насколько я знаю, вы не можете построить scoped_lock (который в основномunique_lock<timed_mutex>) с posix_time. Я лично предпочитаю продолжительность.
  4. По моему мнению, построение замка с абсолютным временем Duration — ваш лучший вариант.
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector