Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template stack

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class template stack

boost::lockfree::stack

Synopsis

// In header: <boost/lockfree/stack.hpp>
template<typename T, typename... Options> 
class stack {
public:
  // types
  typedef T                                 value_type;
  typedef implementation_defined::allocator allocator; 
  typedef implementation_defined::size_type size_type; 
  // construct/copy/destruct
  stack(void);
  template<typename U> 
    explicit stack(typename node_allocator::template rebind< U >::other const &);
  explicit stack(allocator const &);
  explicit stack(size_type);
  template<typename U> 
    stack(size_type, 
          typename node_allocator::template rebind< U >::other const &);
  ~stack(void);
  // public member functions
  bool is_lock_free(void) const;
  void reserve(size_type);
  void reserve_unsafe(size_type);
  bool push(T const &);
  bool bounded_push(T const &);
  template<typename ConstIterator> 
    ConstIterator push(ConstIterator, ConstIterator);
  template<typename ConstIterator> 
    ConstIterator bounded_push(ConstIterator, ConstIterator);
  bool unsynchronized_push(T const &);
  template<typename ConstIterator> 
    ConstIterator unsynchronized_push(ConstIterator, ConstIterator);
  bool pop(T &);
  template<typename U> bool pop(U &);
  bool unsynchronized_pop(T &);
  template<typename U> bool unsynchronized_pop(U &);
  template<typename Functor> bool consume_one(Functor &);
  template<typename Functor> bool consume_one(Functor const &);
  template<typename Functor> size_t consume_all(Functor &);
  template<typename Functor> size_t consume_all(Functor const &);
  template<typename Functor> size_t consume_all_atomic(Functor &);
  template<typename Functor> size_t consume_all_atomic(Functor const &);
  template<typename Functor> size_t consume_all_atomic_reversed(Functor &);
  template<typename Functor> 
    size_t consume_all_atomic_reversed(Functor const &);
  bool empty(void) const;
};

Description

Класс стека обеспечивает стек с несколькими авторами / несколькими читателями, толкание и выскакивание не запираются, конструирование / разрушение должно быть синхронизировано. Он использует свободный список для управления памятью, освобожденные узлы выталкиваются в свободный список и не возвращаются в ОС до разрушения стека.

Политика:

  • <boost::lockfree::fixed_sized<>>, по умолчанию<boost::lockfree::fixed_sized<false>>
    Можно использовать для полного отключения динамических выделений памяти во время толчка, чтобы обеспечить бесблокировочное поведение.
    Если структура данных сконфигурирована как фиксированного размера, внутренние узлы хранятся внутри массива, и они рассматриваются путем индексации массива. Это ограничивает возможный размер стека количеством элементов, которые могут быть адресованы по типу индекса (обычно 2**16-2), но на платформах, которые не имеют двухширотных инструкций сравнения и обмена, это лучший способ достичь свободы блокировки.

  • <boost::lockfree::capacity<>>, факультативно
    Если этот аргумент шаблона передается опциям, размер стека устанавливается во время компиляции.
    Этот вариант подразумевает<fixed_sized<true>>

  • <boost::lockfree::allocator<>><boost::lockfree::allocator<std::allocator<void>>>[<boost::lockfree::allocator<std::allocator<void>>>]
    Указывает распределитель, который используется для внутреннего свободного списка

Требования:

  • У Т должен быть конструктор копий

stack public construct/copy/destruct

  1. stack(void);
    Конструкция стека.
  2. <
    template<typenameU>
     explicitstack(typenamenode_allocator::templaterebind<U>::otherconst&alloc);
    >
  3. <
    explicitstack(allocatorconst&alloc);
    >
  4. <
    explicitstack(size_typen);
    >Постройте стек, выделите n узлов для свободного списка.
  5. <
    template<typenameU>
     stack(size_typen,
           typenamenode_allocator::templaterebind<U>::otherconst&alloc);
    >
  6. ~stack(void);

    Уничтожает стек, освобождает все узлы из свободного списка.

    [Note]Примечание

    не является безопасным для ниток

stack public member functions

  1. [Warning]Предупреждение

    Вместо этого, он должен быть в состоянии работать в режиме реального времени. Включая платформу, шкалу безопасности, данные.

    [] [] [] [] [] [] [] [] [] [] [] [] [] [[[]] [[[]] [[[]] [[[]]] [[[]] [[[]]] [[[]] [[[]]] [[[]]] [[[]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]] [[[]]]] [[[

    Порядок, [факт] [пробуксовка]

    [] [

    ] [] [
    [ORIG_END] -->
  2. [Note]Примечание

    [безопасно для ниток,

    voidreserve(size_typen);

    [
    ~stack(void);
    ] [
    ~stack(void);
    [
    ~stack(void);
    ] [
    ~stack(void);
    ] [
    ~stack(void);
    ] [
    ~stack(void);
    ]

    [

    ] [

    ~stack(void);
    ] [
    ~stack(void);
    ] [
    ~stack(void);
    ] [
    ~stack(void);
    ] [
    ~stack(void);
    ]] [[
    ~stack(void);
    ]] [[[]]] [[[]]]] [[[]]]] [[[[]]]] [[[[]]]] [[[[]]]]] [[[[]]]]] [[[[]]]]] [[[[[]]]]] [[[[[]]]]]] [[[[[]]]]]] [[[[[]]]]]]] [[[[[]]]]]] [[[[[]]]]]]] [[[[[]]]]]]] [[[[[[]]]]]] [[[[[]]]]]]] [[[[[]]]]]]] [[[[[]]]]]]] [[[[]]]<>

[ORIG_END] -->
  • voidreserve_unsafe(size_typen);

    Выделить n узлов для свободного перечня

    [Note]

    не является нить-безопасным, может блокировать, если блоки распределителя памяти

    Требуется:

    действителен только в том случае, если не приводится аргумент

  • boolpush(Tconst&v);

    Притягивает объект t к стеку.

    [Note]Примечание

    Безопасный. Если внутренний пул памяти исчерпан и пул памяти не фиксированного размера, из ОС будет выделен новый узел. Это может быть несвободно.

    Постусловия:

    объект будет толкаться в стек, если можно выделить внутренний узел

    Возврат:

    верно, если операция толчка успешна.

    Бросает:

    если распределитель памяти бросает
  • Побуждения

    [Note]Примечание

    Безопасная и неблокирующая нить. [править] [править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править]] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [

    [

    ] []] [

    ] [

    ] [

    ] [

    ] [
    ] [

    ] []] [

    ] [

    ] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    ]] [

    ] [

    Правда,

    [ORIG_END] -->
  • Примечания

  • [Note]

    [операция атома

    [трид-остатов]. «Финлякс» и «Фольксваген» с фиксированными фиксами, а также «Хлеб» с ОС.

    итератор

    Броски:

    [!-- [ORIG_BEGIN]
    template<typenameConstIterator>
     ConstIteratorpush(ConstIteratorbegin,ConstIteratorend);

    Выталкивает столько объектов из диапазона [начало, конец], сколько может быть выделен узел свободного списка.

    [Note]Примечание

    Применяется атомарно

    Безопасный. Если внутренний пул памяти исчерпан и пул памяти не фиксированного размера, из ОС будет выделен новый узел. Это может быть несвободно.

    Возвращает:

    итератор к первому элементу, который не был подвинут

    Бросает:

    , если распределитель памяти бросает
    [ORIG_END] -->[ORIG_END] -->
  • Взгляд на двойственность [должны], [сверху], [снизу], [сверху], [сверху].

    [Note]Примечание

    Операция

    Безопасный и блокирующий. [править] [править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Править] [Прав

    итератор

    Броски:

    [ORIG_END] -->
  • Пушес [т]

    [Note]Примечание

    Спокойно.

  • Броски:

    [!-- [ORIG_BEGIN]
    boolunsynchronized_push(Tconst&v);

    толкает объект t в стек.

    [Note]Примечание

    Не безопасны для потока. Если внутренний пул памяти исчерпан и пул памяти не фиксированного размера, из ОС будет выделен новый узел. Это может быть несвободно.

    Постусловия:

    объект будет толкаться в стек, если можно выделить внутренний узел

    Возврат:

    верно, если операция толчка успешна.

    Бросает:

    , если распределитель памяти бросает
    [ORIG_END] -->[ORIG_END] -->
  • template<typenameConstIterator>
     ConstIteratorunsynchronized_push(ConstIteratorbegin,ConstIteratorend);

    Выталкивает столько объектов из диапазона [начало, конец], сколько может быть выделен узел свободного списка.

    [Note]Примечание

    Не безвредно. Если внутренний пул памяти исчерпан и пул памяти не фиксированного размера, из ОС будет выделен новый узел. Это может быть несвободно.

    Возвращает:

    итератор к первому элементу, который не был подвинут

    Бросает:

    , если распределитель памяти бросает
  • [Note]Примечание

    [Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note][Note]

    [форматно-операционные связи] [закрыто], [прикрыто]

    [внутреннее положение]:

    [

    [

    ] [

    ] [

    ] [

    ]

    [!-- [ORIG_BEGIN]
    boolpop(T&ret);

    [[Note]] [[Note]] Поп-объект из стека.

    [Note]Примечание

    Пост-условия:

    в случае успешной работы с поп-ап, объект будет скопирован в ret.

    Возврат:

    верно, если операция поп-музыки успешна, ложно, если стек был пуст.

    [ORIG_END] -->[ORIG_END] -->
  • [Note]Примечание

    Преимущество:

    Т'' [T'] [

    ]

    []

    [форматно-операционные связи] [открыто], [прикрыто] [открыто]

    Постановка, [установка], [установка], [установка] [

    [ORIG_END] -->
  • [Note]Примечание

    [] [] [] [] [] []] [] [] [] [] []] [] [] []] [] [] []] [] []] [] []] [] []] [] []] [] []] [] []] [] []] [] []] [] []] [] [] []] [] []] [] [] []] []

    [!-- [ORIG_BEGIN]
    boolunsynchronized_pop(T&ret);

    Поп-объект из стека.

    [Note]Примечание

    Не безвредный, но неблокирующий

    Пост-условия:

    в случае успешной операции с поп-образованием объект будет скопирован в ret.

    Возвращает:

    верно, если операция поп-музыки успешна, ложно, если стек пуст.

    [ORIG_END] -->[ORIG_END] -->
  • template<typenameU>boolunsynchronized_pop(U&ret);

    Поп-объект из стека.

    [Note]Примечание

    Не безвредный, но неблокирующий

    Требования:

    Тип Т должен быть конвертируемым в U

    Пост-условия:

    , если операция с поп-поп будет успешной, объект будет скопирован в рет.

    Возвращает:

    верно, если операция поп-музыки успешна, ложно, если стек был пуст.

  • template<typenameFunctor>boolconsume_one(Functor&f);

    потребляет один элемент через функтор

    выскакивает один элемент из стека и применяет функтор на этом объекте

    [Note]

    Возврат:

    верно, если один элемент был поглощен

  • [разрыв]

    [разрыв]

    [Note]Примечание

    Нить-безопасность и блок-устойчивость, педантизм

    [!-- [ORIG_BEGIN]
    template<typenameFunctor>boolconsume_one(Functorconst&f);

    высасывает один элемент из стека

    Безопасный и неблокирующий нить, если функтор безвредный и неблокирующий

    Возврат:

    истинно, если один элемент был потреблен

    [ORIG_END] -->[ORIG_END] -->
  • template<typenameFunctor>size_tconsume_all(Functor&f);

    потребляет все элементы с помощью функтора

    последовательно выводит все элементы из стека и применяет функтор на каждом объекте

    [Note]Примечание

    Возврат:

    количество потребляемых элементов

  • Примечание

    Нить-опускание-блокирование,

    [ORIG_END] -->
  • Победитель

    атомная электростанция,

  • [Note]
    Примечание

    Нить-безопасность и блокоустойчивость, педантичное колесо

    [!-- [ORIG_BEGIN]
    template<typenameFunctor>size_tconsume_all_atomic(Functor&f);

    атомарно высасывает все элементы из стека и применяет функтор на каждом объекте

    Безопасный и неблокирующий нить, если функтор безвредный и неблокирующий

    Возврат:

    количество элементов, которые потребляются

    [ORIG_END] -->[ORIG_END] -->
  • [Note]

    Толчок-безопасность и блок-установка, эстакада

    [!-- [ORIG_BEGIN]

    атомарно всплывает все элементы из стека и

    атомарно всплывает все элементы

    [Note]

    [ORIG_END] -->
  • неприкосновенность

    атомной электростанции, поднятой в воздух и поднятой в воздух

  • [Note]Примечание

    Нить-безопасность и блокоустойчивость, педантизм

    [ORIG_END] -->
  • template<typenameFunctor>
     size_tconsume_all_atomic_reversed(Functorconst&f);

    потребляет все элементы через функтор

    атомарно выталкивает все элементы из стека и применяет функтор на каждом объекте в обратном порядке

    [Note]Примечание

    Безопасный и неблокирующий поток, если функтор безвредный и неблокирующий

    Возврат:

    количество потребляемых элементов

  • boolempty(void)const;

    [Note]Примечание

    Это только гарантирует, что в какой-то момент во время выполнения функции стек был пуст. Редко практично использовать это значение в программной логике, потому что стек может быть изменен другими потоками.

    Возвращается:

    правда, если стопка пуста.


  • PrevUpHomeNext

    Статья Class template stack раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




    Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



    :: Главная :: Reference ::


    реклама


    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-19 18:04:40/0.013093948364258/1