ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
1352444 Топик полностью
VVB (19.09.2023 13:00, просмотров: 140) ответил Cкpипaч на Где мьютексы?
При обращении к очереди 

receive() вызывается из одного потока, process() из другого.


Я в примере их убрал, было примерно так.

#include <mutex>

std::mutex m;

bool isTestInQueue() { std::lock_guard<std::mutex> lock(m); const bool rc = q.empty(); return !rc; }

const std::shared_ptr<class Test>& getLast() { std::lock_guard<std::mutex> lock(m); const std::shared_ptr<class Test>& rc = q.front(); std::cout << "getLast1: use_count=" << rc.use_count() << std::endl; q.pop(); std::cout << "getLast2: use_count=" << rc.use_count() << std::endl; return rc; }

void receive(const std::shared_ptr<class Test>& t) { std::cout << "receive: use_count=" << t.use_count() << std::endl;
std::lock_guard<std::mutex> lock(m); q.push(t); }