CPP_LECTS_RUS Telegram 86
Работа над ошибками (нужна помощь зала).

В комментариях мой уважаемый подписчик Роман Митин указал что я на лекции показал неправильный пример bounded MPMC queue -- на самом деле извлечение и вставка там шли с одного конца и таким образом это был скорее bounded MPMC stack. Для многопоточной среды разница не так велика -- задачи ставятся в "очередь" и разбираются консьюмерами и в общем по циклограмме работы сложно отличить что там было. Но я решил сделать настоящую очередь и заодно улучшить тесты.

И вот тут я обратил внимание что у меня было ещё несколько ошибок, пока в комментариях не замеченных.

(1) В случае multi-producer делать wake_and_done надо на всех продьюсеров один раз иначе бывает так что консьюмеры повыходили но не все продьюсеры ещё закончили.
(2) Саму функцию wait_and_pop надо делать с сигнатурой bool wait_and_pop(T &Data) чтобы понимать есть там что консьюмить или нет
(3) Внутри wait_and_pop условие должно выглядеть так:

CondCons.wait(Lk, [this] { return !empty() || done(); });
if (empty())
return false;

Даже если у нас сигнализирован done, задачи могут быть недоразобраны и поэтому критерий return false это только empty.

(4) Внутри push признак done вообще проверять не надо т.к. это признак отработки всех продьюсеров. Там играет роль только full.
(5) В интерфейсе необходим метод is_empty_and_done() чтобы по нему консьюмеры понимали когда начинать выходить.

В общем это жесть. Пять ошибок в довольно простом коде и я не уверен что я ещё чего-то не пропустил.

Полу-финальные версии bounded stack и bounded queue с тестами на то что они не теряют задач я выложил сюда:

https://github.com/tilir/cpp-masters/blob/master/queues/classic_queue.cc
https://github.com/tilir/cpp-masters/blob/master/queues/classic_stack.cc

Нужна помощь зала в проверке не упустил ли я ещё чего-нибудь. Хочу в среду с этого начать лекцию и не хотелось бы облажаться ещё в чём-нибудь столь же тонком.

#questions
👍34🤯10👏4🤨1



tgoop.com/cpp_lects_rus/86
Create:
Last Update:

Работа над ошибками (нужна помощь зала).

В комментариях мой уважаемый подписчик Роман Митин указал что я на лекции показал неправильный пример bounded MPMC queue -- на самом деле извлечение и вставка там шли с одного конца и таким образом это был скорее bounded MPMC stack. Для многопоточной среды разница не так велика -- задачи ставятся в "очередь" и разбираются консьюмерами и в общем по циклограмме работы сложно отличить что там было. Но я решил сделать настоящую очередь и заодно улучшить тесты.

И вот тут я обратил внимание что у меня было ещё несколько ошибок, пока в комментариях не замеченных.

(1) В случае multi-producer делать wake_and_done надо на всех продьюсеров один раз иначе бывает так что консьюмеры повыходили но не все продьюсеры ещё закончили.
(2) Саму функцию wait_and_pop надо делать с сигнатурой bool wait_and_pop(T &Data) чтобы понимать есть там что консьюмить или нет
(3) Внутри wait_and_pop условие должно выглядеть так:

CondCons.wait(Lk, [this] { return !empty() || done(); });
if (empty())
return false;

Даже если у нас сигнализирован done, задачи могут быть недоразобраны и поэтому критерий return false это только empty.

(4) Внутри push признак done вообще проверять не надо т.к. это признак отработки всех продьюсеров. Там играет роль только full.
(5) В интерфейсе необходим метод is_empty_and_done() чтобы по нему консьюмеры понимали когда начинать выходить.

В общем это жесть. Пять ошибок в довольно простом коде и я не уверен что я ещё чего-то не пропустил.

Полу-финальные версии bounded stack и bounded queue с тестами на то что они не теряют задач я выложил сюда:

https://github.com/tilir/cpp-masters/blob/master/queues/classic_queue.cc
https://github.com/tilir/cpp-masters/blob/master/queues/classic_stack.cc

Нужна помощь зала в проверке не упустил ли я ещё чего-нибудь. Хочу в среду с этого начать лекцию и не хотелось бы облажаться ещё в чём-нибудь столь же тонком.

#questions

BY C++ and other lectures


Share with your friend now:
tgoop.com/cpp_lects_rus/86

View MORE
Open in Telegram


Telegram News

Date: |

Users are more open to new information on workdays rather than weekends. Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data. Find your optimal posting schedule and stick to it. The peak posting times include 8 am, 6 pm, and 8 pm on social media. Try to publish serious stuff in the morning and leave less demanding content later in the day. As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.”
from us


Telegram C++ and other lectures
FROM American