thread safe контейнеры
От: Kubyshev Andrey  
Дата: 25.10.13 04:27
Оценка:
Привет всем,
Кто как делает thread safe контейнеры?
Надоело уже лочить-разлочить. Хотелось бы автоматику.
Re: thread safe контейнеры
От: landerhigh Пират http://www.blinnov.com
Дата: 25.10.13 05:08
Оценка: 14 (2) +3
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Привет всем,

KA>Кто как делает thread safe контейнеры?
KA>Надоело уже лочить-разлочить. Хотелось бы автоматику.

Не бывает абстрактных сферических thread safe контейнеров в вакууме. И не может быть. Тех, кто употребляет такое слово применительно к контейнерам вообще, нужно нещадно бить батогами и ссылать в Сибирь

Бывают lock-free алгоритмы, многие из которых реализуются через определенные lock-free контейнеры.
Бывают задачи, которые могут удовлетворитсья специализированным конейнером, реализующим необходимые блокировки автоматически внутри его методов.

В более общем случае thread-safe контейнер — это нечто, чего нет. Думаю, можно натянуть научно выглядящее определение, позволяющее объяснить, какие контейнеры при решении каких задач могут брать задачу обеспечения thread safety на себя, а какие-нет.

Например, очередь, в которую только Push и из которой только Pop, может быть thread safe сама по себе. Кстати, в том числе и поэтому ее очень любят делать вообще lock-free.
А вот возьми std::map. У тебя есть insert. Есть erase. Есть find. А еще есть итераторы и внешние алгоритмы, которые их используют. И вот тут — все, приплыли. Для того, чтобы внешние алгоритмы работали, твой контейнер должен оставаться инвариантом на время их работы. Блокировки внутри методов самого контейнера этого обеспечить не смогут. Все, выражение "thread safe std::map" тут же теряет всякий смысл.

Как-то так.

Ксатти, если "лочить-разлочить" настолько большая проблема, что аж "надоело", то не пора ли пересматривать архитектуру?
www.blinnov.com
Re: thread safe контейнеры
От: Evgeny.Panasyuk Россия  
Дата: 25.10.13 05:09
Оценка: 21 (5)
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Кто как делает thread safe контейнеры?

KA>Надоело уже лочить-разлочить. Хотелось бы автоматику.

Ты про ситуацию когда просто mutex добавляется к объекту?
Тогда возможно тебе подойдёт monitor<T>: C++ and Beyond 2012: Herb Sutter &mdash; C++ Concurrency

template<typename T>
class monitor
{
    mutable mutex m;
    mutable T t;
public:
    typedef T &ref;
    template<typename F>
    auto operator()(F f) const -> decltype(f(t))
    {
        return lock_guard<mutex>(m),
               f(t);
    }
};
// ...
{
    monitor<vector<int>> m;
    // ...
    m([](decltype(m)::ref x)
    {
        x.resize(10);
        x.push_back(1);
    });
}
Re[2]: thread safe контейнеры
От: Kubyshev Andrey  
Дата: 25.10.13 05:26
Оценка:
KA>>Надоело уже лочить-разлочить. Хотелось бы автоматику.
L>Не бывает абстрактных сферических thread safe контейнеров в вакууме. И не может быть. Тех, кто употребляет такое слово применительно к контейнерам вообще, нужно нещадно бить батогами и ссылать в Сибирь

Да, я помнил это, но вот забыл зачем это я все время пишу отдельно.
Re[2]: thread safe контейнеры
От: Evgeny.Panasyuk Россия  
Дата: 25.10.13 05:38
Оценка: 12 (2)
EP>
EP>{
EP>    monitor<vector<int>> m;
EP>    // ...
EP>    m([](decltype(m)::ref x)
EP>    {
EP>        x.resize(10);
EP>        x.push_back(1);
EP>    });
EP>}
EP>


Кстати, при желании лямбду можно хватать оператором:
m * [&](decltype(m)::ref x)
{
    x.resize(10);
    x.push_back(1);
};

И завернуть в макрос. Тогда получится такой синтаксис:
MONITOR(m, x)
{
    x.resize(10);
    x.push_back(1);
};
Re[2]: thread safe контейнеры
От: Pavel Dvorkin Россия  
Дата: 27.10.13 12:23
Оценка: :)
Здравствуйте, landerhigh, Вы писали:

L>Не бывает абстрактных сферических thread safe контейнеров в вакууме. И не может быть. Тех, кто употребляет такое слово применительно к контейнерам вообще, нужно нещадно бить батогами и ссылать в Сибирь


Почему ты считаешь, что они нам нужны, да еще побитые батогами ?
With best regards
Pavel Dvorkin
Re[3]: thread safe контейнеры
От: landerhigh Пират http://www.blinnov.com
Дата: 28.10.13 04:33
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Почему ты считаешь, что они нам нужны, да еще побитые батогами ?


Ну не в Индию же
www.blinnov.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.