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

Class template spsc_queue

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 spsc_queue

boost::lockfree::spsc_queue

Synopsis

// In header: <boost/lockfree/spsc_queue.hpp>
template<typename T, typename... Options> 
class spsc_queue {
public:
  // types
  typedef T                                 value_type;
  typedef implementation_defined::allocator allocator; 
  typedef implementation_defined::size_type size_type; 
  // construct/copy/destruct
  spsc_queue(void);
  template<typename U> 
    explicit spsc_queue(typename allocator::template rebind< U >::other const &);
  explicit spsc_queue(allocator const &);
  explicit spsc_queue(size_type);
  template<typename U> 
    spsc_queue(size_type, 
               typename allocator::template rebind< U >::other const &);
  spsc_queue(size_type, allocator_arg const &);
  // public member functions
  bool push(T const &);
  bool pop();
  template<typename U> 
    boost::enable_if< typename is_convertible< T, U >::type, bool >::type 
    pop(U &);
  size_type push(T const *, size_type);
  template<size_type size> size_type push(T const (&));
  template<typename ConstIterator> 
    ConstIterator push(ConstIterator, ConstIterator);
  size_type pop(T *, size_type);
  template<size_type size> size_type pop(T(&));
  template<typename OutputIterator> 
    boost::disable_if< typename is_convertible< T, OutputIterator >::type, size_type >::type 
    pop(OutputIterator);
  template<typename Functor> bool consume_one(Functor &);
  template<typename Functor> bool consume_one(Functor const &);
  template<typename Functor> size_type consume_all(Functor &);
  template<typename Functor> size_type consume_all(Functor const &);
  size_type read_available() const;
  size_type write_available() const;
  const T & front() const;
  T & front();
  void reset(void);
};

Description

spsc_queueкласс обеспечивает однописательную / одночитательную очередь, толкание и выскакивание не требуют ожидания.

Политика:

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

  • <boost::lockfree::allocator<>>, дефолты<boost::lockfree::allocator<std::allocator<T>>>
    Указывает распределитель, который используется для выделения рингбуфера. Эта опция действительна только в том случае, если рингбуфер сконфигурирован для размера во время выполнения

    .

Требования:

  • У T должен быть конструктор по умолчанию

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

spsc_queue public construct/copy/destruct

  1. <
    spsc_queue(void);
    >

    Конструкция<spsc_queue>

    Требует:

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

  2. <
    template<typenameU>
     explicitspsc_queue(typenameallocator::templaterebind<U>::otherconst&);
    >
  3. <
    explicitspsc_queue(allocatorconst&);
    >
  4. explicitspsc_queue(size_typeelement_count);

    Построение aspsc_queueдля элементов

    Требуется:

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

    .
  5. <
    template<typenameU>
     spsc_queue(size_typeelement_count,
                typenameallocator::templaterebind<U>::otherconst&alloc);
    >
  6. <
    spsc_queue(size_typeelement_count,allocator_argconst&alloc);
    >

spsc_queue public member functions

  1. boolpush(Tconst&t);

    Подталкивает объект t к рингтону.

Примечание

Требуется:

] Только одна нить может толкать данные вspsc_queue

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

объект будет толкаться вspsc_queue, если он не заполнен.

Возвращение:

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

  • boolpop();

    [Note][Note]

    Требуется:

    только одна нить может вскрывать данные вspsc_queue

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

    если рингтон не пуст, объект будет отброшен.

    Возврат:

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

  • <
    template<typenameU>
     boost::enable_if<typenameis_convertible<T,U>::type,bool>::type
     pop(U&ret);
    >

    Помещает один предмет из рингтона.

    Примечание

  • Требуется:

    ] Только одна нить допускается для ввода данных вspsc_queue

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

    Если рингбуфер не пуст, объект будет скопирован в рет.

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

    истинно, если эстрадная операция успешна, ложно, если рингтон пуст.

  • size_typepush(Tconst*t,size_typesize);

    Выталкивает из массива t столько же объектов, сколько и пространства.

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

    количество нажатых элементов

    Требуется:

    только одна нить позволяет нажимать данные наspsc_queue

    Возврат:

  • <
    template<size_typesize>size_typepush(Tconst(&)t);
    >

    Выталкивает из массива t столько объектов, сколько есть свободного места.

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

    количество подталкиваемых элементов

    [[[]] Требуется:

    только одному потоку разрешено подталкивать данные кspsc_queue

    Возвращает:

  • template<typenameConstIterator>
     ConstIteratorpush(ConstIteratorbegin,ConstIteratorend);

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

    Примечание

    Требуется:

    только одному потоку разрешено подталкивать данные кspsc_queue

    Возвращает:

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

  • size_typepop(T*ret,size_typesize);

    Помещает объекты максимального размера из рингтона.

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

    Требуется:

    только один поток допускается для ввода данных вspsc_queue

    Возврат:

    количество всплывающих предметов

  • <
    template<size_typesize>size_typepop(T(&)ret);
    >

    Помещает объекты максимального размера из<spsc_queue>.

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

    Требуется:

    только одна нить допускается для ввода данных вspsc_queue

    Возврат:

    количество всплывающих элементов

  • template<typenameOutputIterator>
     boost::disable_if<typenameis_convertible<T,OutputIterator>::type,size_type>::type
     pop(OutputIteratorit);

    Поп-объекты к выходному итератору это

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

    Требуется:

    только одна нить позволяет всплывать данные вspsc_queue

    Возврат:

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

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

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

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

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

    Возврат:

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

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

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

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

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

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

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

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

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

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

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

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

    Возврат:

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

  • template<typenameFunctor>size_typeconsume_all(Functorconst&f);

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

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

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

    Возврат:

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

  • <
    size_typeread_available()const;
    >

    получить число элементов, доступных для чтения

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

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

    Возврат:

    количество доступных элементов, которые могут быть выведены изspsc_queue

  • <
    size_typewrite_available()const;
    >

    получить пространство записи для записи элементов

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

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

    Возвращает:

    число элементов, которые могут быть перемещены вspsc_queue

  • constT&front()const;

    получить ссылку на элемент в передней части очереди

    Наличие переднего элемента можно проверить с помощью read_available().

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

    Требуется:

    только поглощающая нить позволяет проверить передний элемент

    read_available() >0. Если рингтон пуст, это неопределенное поведение, чтобы вызвать этот метод.

    Возврат:

    ссылка на первый элемент в очереди

  • T&front();

    получить ссылку на элемент в передней части очереди

    Доступность фронтального элемента можно проверить с помощью read_available().

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

    Требуется:

    только поглощающая нить позволяет проверить передний элемент

    read_available() >0. Если рингбуфер пуст, это неопределенное поведение, чтобы вызвать этот метод.

    Возврат:

    ссылка на первый элемент в очереди

  • <
    voidreset(void);
    >

    перезагрузка

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

    Не безвредный


  • PrevUpHomeNext

    Статья Class template spsc_queue раздела 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:23:23/0.0088901519775391/0