Производитель-потребительская очередь-std :: queue или пользовательский связанный список?

Я наткнулся на следующий пост, в котором подробно описана очередь без блокировки для производителя:

C ++ Lock свободная очередь производителя / потребителя

который использует специально написанный список ссылок. Какова цель написания связанного списка, когда можно просто использовать std::queue и написать некоторые обертки доступа вокруг структуры данных?

3

Решение

Невозможно спроектировать std::list где push_back а также pop_front не изменяйте размер члена. Если у вас есть два потока, вызывающих их одновременно, они, вероятно, повредят список. Вы можете написать аксессуар-обертку, чтобы сделать его безопасным, с помощью замков. Это побеждает цель структуры без блокировки. И то и другое push_back а также pop_front из std::deque потребуется изменить внутренний «вектор» указателей на узлы, и если они вызываются одновременно двумя разными потоками, опять же, они повреждают деку.

Можно легко написать очередь производителя или потребителя, свободную от блокировки списка или циклического буфера, но ни один стандартный контейнер C ++ не подходит.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]