Информация об изменениях

Сообщение Re: нужен контейнер, потокобезопасный, с неинвалидирующимися от 08.08.2018 11:30

Изменено 08.08.2018 11:39 landerhigh

Re: нужен контейнер, потокобезопасный, с неинвалидирующимися ите
Здравствуйте, ksd, Вы писали:

ksd>возможен ли готовый хороший субж в природе?


Нет. Но если возник такой вопрос, то самый правильный ответ — нужно продумывать архитектуру.

ksd>(вектор, лист, сет или их аналоги -- все подойдет)


Сферической потокобезопасности в вакууме не бывает. Ее можно натянуть на контейнеры, которые используются исключительно через операции единичной вставки/чтения (очередь, к примеру)

Попытка сделать "потокобезопасными" конейнеры, по которым необходимо итерироваться, в конечном итоге приводит к куче проблем и выкорчевыванию "изобретения" из проекта.

for (auto i = container.begin(); i != container.end(); ++i)
{
    auto some_value = do_something_with(*i);
    call_some_other_code(some_value);
    // another 100500 lines of code
}


Код выше нельзя в общем случае сделать потокобезопасным средствами контейнера.
Re: нужен контейнер, потокобезопасный, с неинвалидирующимися
Здравствуйте, ksd, Вы писали:

ksd>возможен ли готовый хороший субж в природе?


Нет. Но если возник такой вопрос, то самый правильный ответ — нужно продумывать архитектуру.

ksd>(вектор, лист, сет или их аналоги -- все подойдет)


Сферической потокобезопасности в вакууме не бывает. Ее можно натянуть на контейнеры, которые используются исключительно через операции единичной вставки/чтения (очередь, к примеру)

Попытка сделать "потокобезопасными" контейнеры, по которым необходимо итерироваться, в конечном итоге приводит к куче проблем и выкорчевыванию "изобретения" из проекта.

for (auto i = container.begin(); i != container.end(); ++i)
{
    auto some_value = do_something_with(*i);
    call_some_other_code(some_value);
    // another 100500 lines of code
}


Код выше нельзя в общем случае сделать потокобезопасным средствами контейнера.