2010-05-15 2 views
6

Возможных Дублировать:
Is there a production ready lock-free queue or hash implementation in C++Есть ли одновременно контейнер библиотек для C++

Я ищу реализации безблокировочных контейнеров:

  • Очереди
  • Стек
  • Hash Карта
  • и т.д ...

Как насчет блокировки контейнеров:

  • Блокировка очереди
  • Блокирующие Stack

Есть ли какие-нибудь хорошие библиотеки там? Я хотел бы воздержаться от написания этих структур данных ... Я бы скорее использовал то, что было проверено сообществом.

+1

Если вы используете слово «блокировка», оно не блокируется ... –

+0

@Evan, я исправил свой вопрос, но должен быть способ сделать блокировку блокировки с помощью CAS и что-то вроде эквивалент C++ ManualResetEvent ... – Kiril

+0

@Link: CAS не может использоваться для реализации блокировки. В лучшем случае вы можете использовать spinlocks (что было бы ужасно для этого типа вещей), но вам нужна помощь планировщика (mutex/semaphore/etc), чтобы фактически блокировать. –

ответ

4

Посмотрите на классы контейнеров Intel TBB. Ссылка говорит:

Классы контейнеров позволяет несколько потоков одновременно вызывать определенные методы на тот же контейнер.

3

Herb Sutter сделал несколько статей в своей серии «Эффективные параллелизм» в журнале доктора Доббса. Две статьи вы, вероятно, хотите читать прямо сейчас являются:

rest of the series, безусловно, стоит прочитать, как хорошо.

+0

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

+0

@ Lirik: Основная причина, по которой я ссылаюсь на них, заключается в том, что Херб очень * глубоко обсуждает, как и почему это работает, и какие подводные камни там написаны. У него также есть полные, рабочие примеры, которые я скопировал и использовал дословно с успехом. (Хотя они ожидают компилятор, совместимый с C++ 0x, или эквивалентный тип 'atomic <>'.) – greyfade

Смежные вопросы