Приспосабливание к cppreference.com:>>
Поток, который намеревается изменить переменную, должна < /p>
Приобретать std :: mutex (обычно std :: lock_guard) < /li>
выполнять nefute notify_one или notify_all на std :: stordy_variable (блокировку не нужно удерживать для уведомления) < /li>
< /ol>
Даже если общая переменная является атомальной, она должна быть изменена под Mutex, чтобы правильно публиковать модификацию. /> < /blockquote>
Я не совсем понимаю, зачем изменять атомную переменную должна требовать блокировки. См. Следующий фрагмент кода: < /p>
static std::atomic_bool s_run {true};
static std::atomic_bool s_hasEvent {false};
static std::mutex s_mtx;
static std::condition_variabel s_cv;
// Thread A - the consumer thread
function threadA()
{
while (s_run)
{
{
std::unique_lock lock(s_mtx);
s_cv.wait(lock, [this]{
return m_hasEvents.load(std::memory_order_relaxed);
});
}
// process event
event = lockfree_queue.pop();
..... code to process the event ....
}
}
// Thread B - publisher thread
function PushEvent(event)
{
lockfree_queque.push(event)
s_hasEvent.store(true, std::memory_order_release);
s_cv.notify_one();
}
< /code>
В функции pushevent я не получаю s_mtx, потому что S_HASEVENT является атомной переменной, а очередь - беззаботно. В чем проблема без приобретения блокировки s_mtx?
Подробнее здесь: https://stackoverflow.com/questions/418 ... efore-noti
Почему мне нужно приобрести блокировку для изменения общей «атомной» переменной, прежде чем уведомлять условия_variable ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Qualtrics: вызов переменной JavaScript внутри CSS с использованием $ {variable} не работает
Anonymous » » в форуме CSS - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Qualtrics: вызов переменной JavaScript внутри CSS с использованием $ {variable} не работает
Anonymous » » в форуме CSS - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Зачем уведомлять PropertyChanged для не работать на onanothernameChanged в C# MVVM Toolkit
Anonymous » » в форуме C# - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-