Потокобезопасная очередь
Запись от Loafer размещена 10.08.2020 в 16:51
Показов 3089
Комментарии 11
Метки c++
Оставляю здесь кусок кода, который возможно мне понадобится в будущем.
| ||||||||||
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 11
Комментарии
-
Запись от Croessmah размещена 11.08.2020 в 21:23
-
Запись от Avazart размещена 11.08.2020 в 21:46
-
Запись от Loafer размещена 11.08.2020 в 22:15
-
Запись от Loafer размещена 11.08.2020 в 22:16
-
Для начала:
Почему Вы решили что тут не нужны блокировки и это потокобезопасно?C++ 1 2 3 4 5 6
// Извлечение из начала очереди std::unique_ptr<Node> pop_head() { std::unique_ptr<Node> old_head = std::move(m_head); m_head = std::move(old_head->next); return std::move(old_head); }
Зачем здесь shared_ptr ? Какая аргументация?C++ 1 2 3 4 5 6 7 8 9
std::shared_ptr<T> try_pop() { LockGuard head_lock(m_head_mutex); if (m_head.get() == get_tail()) { return nullptr; } std::unique_ptr<Node> old_head = pop_head(); return old_head->data; }
Запись от Avazart размещена 11.08.2020 в 23:12
-
Метод
Сообщение от Avazart
pop_headявляется приватным, значит пользователь его никогда не вызовет извне. А внутри других публичных методов, где вызывается методpop_head, методpop_headвсегда защищен мьютексом.
Это один из перегруженных вариантов
Сообщение от Avazart
try_pop, который возвращаетshared_ptrна извлеченный элемент из очереди. Я делал очередь на основании книги, которая указана в самом верхнем комментарии в коде. Почему автор выбралshared_ptr, я информации в книге не нашел. Наверное, из-за каких-то своих собственных предпочтений.Запись от Loafer размещена 12.08.2020 в 00:27
-
Запись от Avazart размещена 12.08.2020 в 18:40
-
Я кстати тоже когда то пытался с этой темой разобраться вот моя тема:
https://www.cyberforum.ru/cpp-... 25177.htmlЗапись от Avazart размещена 31.08.2020 в 00:40
-
Запись от XLAT размещена 31.08.2020 в 15:22
-
Запись от Loafer размещена 31.08.2020 в 18:23
-
Запись от Avazart размещена 01.09.2020 в 11:20



