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

Fiber local storage

Boost , Chapter 1. Fiber , Chapter 1. Fiber

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

Synopsis

Волоконное локальное хранилище позволяет отдельный экземпляр данного элемента данных для каждого волокна.

Cleanup at fiber exit

При выходе волокна разрушаются объекты, связанные с каждым<fiber_specific_ptr>экземпляром. По умолчанию объект, на который указывает указатель<p>, разрушается путем вызова<deletep>, но это может быть отменено для конкретного примера<fiber_specific_ptr>, обеспечивая рутину очистки<func>для конструктора. В этом случае объект уничтожается путем вызова<func(p)>. Функции очистки называются в неуказанном порядке.

Class fiber_specific_ptr

#include <boost/fiber/fss.hpp>
namespace boost {
namespace fibers {
template< typename T >
class fiber_specific_ptr {
public:
    typedef T   element_type;
    fiber_specific_ptr();
    explicit fiber_specific_ptr( void(*fn)(T*) );
    ~fiber_specific_ptr();
    fiber_specific_ptr( fiber_specific_ptr const&) = delete;
    fiber_specific_ptr & operator=( fiber_specific_ptr const&) = delete;
    T * get() const noexcept;
    T * operator->() const noexcept;
    T & operator*() const noexcept;
    T * release();
    void reset( T *);
};
}}

Constructor

fiber_specific_ptr();
explicit fiber_specific_ptr( void(*fn)(T*) );

Requires:

<deletethis->get()>хорошо сформирован;<fn(this->get())>не бросает

Effects:

Постройте<fiber_specific_ptr>объект для хранения указателя на объект типа<T>, специфичный для каждого волокна. Когда<reset()>вызывается, или волокно выходит,<fiber_specific_ptr>вызывает<fn(this->get())>. Если используется конструктор без аргументов, по умолчанию<delete>функция очистки будет использоваться для уничтожения волоконно-локальных объектов.

Throws:

<fiber_error>Если произошла ошибка.

Destructor

~fiber_specific_ptr();

Requires:

Все специфические экземпляры волокна, связанные с этим<fiber_specific_ptr>(кроме, возможно, одного, связанного с этим волокном), должны быть нульптр.

Effects:

Призывает<this->reset()>очистить связанное значение для текущего волокна и разрушает<*this>.

Remarks:

Требование является ограничением реализации. Если деструктор обещал удалить экземпляры для всех волокон, реализация будет вынуждена поддерживать список всех волокон, имеющих связанный конкретный ptr, что противоречит цели конкретных данных волокна. В общем,<fiber_specific_ptr>должны пережить волокна, которые его используют.

[Note] Note

Необходимо позаботиться о том, чтобы любые волокна, все еще работающие после того, как экземпляр<fiber_specific_ptr>был уничтожен, не вызывали каких-либо функций члена на этом экземпляре.

Member function get()

T * get() const noexcept;

Returns:

Указатель, связанный с текущим волокном.

Throws:

Ничего.

[Note] Note

Начальное значение, связанное с экземпляром<fiber_specific_ptr>, составляет<nullptr>для каждого волокна.

Member function operator->()

T * operator->() const noexcept;

Requires:

<this->get()>не является<nullptr>.

Returns:

<this->get()>

Throws:

Ничего.

Member function operator*()

T & operator*() const noexcept;

Requires:

<this->get()>не является<nullptr>.

Returns:

<*(this->get())>

Throws:

Ничего.

Member function release()

T * release();

Effects:

Возврат<this->get()>и хранение<nullptr>в качестве указателя, связанного с текущим волокном, без вызова функции очистки.

Postcondition:

<this->get()==nullptr>

Throws:

Ничего.

Member function reset()

void reset( T * new_value);

Effects:

Если<this->get()!=new_value>и<this->get()>не<nullptr>, то ссылайтесь<deletethis->get()>или<fn(this->get())>соответственно. Храните<new_value>как указатель, связанный с текущим волокном.

Postcondition:

<this->get()==new_value>

Throws:

Исключение, поднятое при очистке от прежней стоимости.


PrevUpHomeNext

Статья Fiber local storage раздела Chapter 1. Fiber Chapter 1. Fiber может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Fiber ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:51:19/0.0070531368255615/0