packet) {
lockfreeQueue.push(packet);
cv.notify_one();
}
// в другом потоке 2, жду пока size() > 0, с помощью condition_variable
std::mutex m;
std::unique_lock<std::mutex> lock(m);
cv.wait(lock, [] { return lockfreeQueue.size > 0; });
Однако в примере, https://en.cppreference.com/w/cpp/thread/condition_variable в функции worker_thread используется mutex и cv.wait() Вопрос: мне нужно использовать mutex и cv в коллбеке? Сейчас я не использую (как в коде выше). Но приходится использовать cv и unique_lock на wait'e, при чтении (как в коде выше).
Я понимаю, там в примере защищаются данные - переменные data и processed. У меня же сама очередь этим занимается. Задача: начать обработку пакетов в другом потоке, как только там появятся данные (без while(true) + sleep())
Очередь занимается контролем доступа к данным очереди, а к своим данным ты уже должен сам разбираться, нужно там мьютекс использовать или нет
подскажите пожалуйста) а то оно уползло
В твоей очереди должен быть какой-то аналог операции shared_ptr<T> pop() В неё и долбишься, пока она не вернёт не ноль.
Посмотри тут обсуждение: https://groups.google.com/forum/m/#!topic/comp.programming.threads/lGG0FwnkBjo
Обсуждают сегодня