Мне нужно разделить boost :: deadline_timer между двумя потоками. В дополнительной документации говорится: «Общие экземпляры не являются потокобезопасными». Вот пример кода:Share deadline_timer между двумя потоками
ClassA : public enable_shared_from_this<ClassA>{
ClassA()
{
m_timer = new boost::deadline_timer(m_io_service);
}
destroy()
{
m_timer->cancel();
delete m_timer;
m_timer = NULL;
}
thread_method()
{
m_timer->expire_from_now(...);
m_timer->async_wait(...);
}
run()
{
boost::thread t(ClassA::thread_method, shared_from_this);
}
}
Мой вопрос «Для синхронизации доступа таймера между Destroy() и thread_method(), можно использовать повышение :: атомное
Заголовок:
boost::atomic<boost::deadline_timer*> m_timer;
Конструктор
m_timer = new boost::deadline_timer(m_io_service);
Это поточно-безопасный?
спасибо.
Вы пробовали компиляции свой собственный код, чтобы увидеть, если вам есть какие-то проблемы? – inetknght
@inetknght, почему вы должны знать? Он действительно не просит помощи в ошибках компилятора или некоторых таких. Я думаю, что там достаточно информации (если не _too much_). – sehe
Код компилируется, но иногда я имею сбой, потому что поток пытается получить доступ к m_timer, а другой поток удалил m_timer. Поэтому я думаю, что мне нужно использовать мьютекс в destroy() и thread_method(), no? – user1886318