Я новичок в продвижении потоков (пришло из потоков 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();
}
boost::atomic<bool>
был добавлен в boost v1.53.0 на основе c ++ 11 std::atomic
s. Например:
#include <boost/atomic.hpp>
boost::atomic<bool> is_killing (false);
while (!is_killing)
{
}
Это устранит явное mutex
и safe_access
Функция из кода, обеспечивающая необходимую синхронизацию.
Я не думаю, что это работает так, как вы думаете, потому что как только функция safe_access возвращается, блокировка снимается.