Существует ли усиление, эквивалентное этому & quot; safe_read & quot; вызов

Я новичок в продвижении потоков (пришло из потоков Win32, что, вероятно, разрушило меня).

Поэтому я пытаюсь сделать более «RAII» способ проверить, что рабочий цикл все еще должен идти. Итак, я сделал эту простую функцию:

template<typenameT>
T safe_read(const T& t,boost::mutex& mutex)
{
boost::interprocess::scoped_lock lock(mutex);
return t;
}

Есть ли в этом эквивалент усиления, так как кажется, что я бы использовал это все время? Также это приемлемый вызов?

Идея состоит в том, чтобы быть в состоянии безопасно сделать это, не используя странную блокировку:

while(!safe_read(this->is_killing_,this->is_killing_mutex_))
{
DoWork();
}

2

Решение

boost::atomic<bool> был добавлен в boost v1.53.0 на основе c ++ 11 std::atomics. Например:

#include <boost/atomic.hpp>

boost::atomic<bool> is_killing (false);

while (!is_killing)
{
}

Это устранит явное mutex и safe_access Функция из кода, обеспечивающая необходимую синхронизацию.

3

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

Я не думаю, что это работает так, как вы думаете, потому что как только функция safe_access возвращается, блокировка снимается.

0