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

Class fiber

Boost , Chapter 1. Fiber , Fiber management

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
#include <boost/fiber/fiber.hpp>
namespace boost {
namespace fibers {
class fiber {
public:
    class id;
    constexpr fiber() noexcept;
    template< typename Fn, typename ... Args >
    fiber( Fn &&, Args && ...);
    template< typename Fn, typename ... Args >
    fiber( launch, Fn &&, Args && ...);
    template< typename StackAllocator, typename Fn, typename ... Args >
    fiber( std::allocator_arg_t, StackAllocator, Fn &&, Args && ...);
    template< typename StackAllocator, typename Fn, typename ... Args >
    fiber( launch, std::allocator_arg_t, StackAllocator, Fn &&, Args && ...);
    ~fiber();
    fiber( fiber const&) = delete;
    fiber & operator=( fiber const&) = delete;
    fiber( fiber &&) noexcept;
    fiber & operator=( fiber &&) noexcept;
    void swap( fiber &) noexcept;
    bool joinable() const noexcept;
    id get_id() const noexcept;
    void detach();
    void join();
    template< typename PROPS >
    PROPS & properties();
};
bool operator<( fiber const&, fiber const&) noexcept;
void swap( fiber &, fiber &) noexcept;
template< typename SchedAlgo, typename ... Args >
void use_scheduling_algorithm( Args && ...) noexcept;
bool has_ready_fibers() noexcept;
}}
Default constructor
constexpr fiber() noexcept;

Effects:

<fiber>Пример, который относится кне-волокно.

Postconditions:

<this->get_id() ==fiber::id()>

Throws:

Ничего.

Constructor
template< typename Fn, typename ... Args >
fiber( Fn && fn, Args && ... args);
template< typename Fn, typename ... Args >
fiber( launch policy, Fn && fn, Args && ... args);
template< typename StackAllocator, typename Fn, typename ... Args >
fiber( std::allocator_arg_t, StackAllocator salloc, Fn && fn, Args && ... args);
template< typename StackAllocator, typename Fn, typename ... Args >
fiber( launch policy, std::allocator_arg_t, StackAllocator salloc,
       Fn && fn, Args && ... args);

Preconditions:

<Fn>Должна быть копируемой или подвижной.

Effects:

<fn>копируется или перемещается во внутреннее хранилище для доступа новым волокном. Если<launch>указано (или по умолчанию) на<post>, новое волокно помечено& #8220;готово& #8221;и будет введено при следующей возможности. Если<launch>указано как<dispatch>, вызывающее волокно подвешивается и новое волокно вводится немедленно.

Postconditions:

<*this>относится к вновь созданному волокну исполнения.

Throws:

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

Note:

<StackAllocator>требуется выделить стек для внутреннегоисполнения_контекста. Если<StackAllocator>не пройдено явно, распределение стека по умолчанию зависит от<BOOST_USE_SEGMENTED_STACKS>: Если вы будете определены, то получите<segmented_stack>, а не<fixedsize_stack>.

See also:

<std::allocator_arg_t>Распределение стоков

Move constructor
fiber( fiber && other) noexcept;

Effects:

Передача права собственности на волокно, управляемое<other>, в вновь построенный<fiber>экземпляр.

Postconditions:

<other.get_id() ==fiber::id()>и<get_id()>возвращает стоимость<other.get_id()>до начала строительства.

Throws:

Ничего.

Move assignment operator
fiber & operator=( fiber && other) noexcept;

Effects:

<other>[<*this>] [[<*this>]] [[<*this>]] [[<other>]] [[[<*this>]]]] [[[<*this>]]]] [[[<*this>]]]] [[[[[]]]]]] [[[[[[]]]]]][[[[[[[]]]]]][[[[[[]]]]]][[[[[[[]]]]]][[[[[[[]]]]]]]][[[[[[[]]]]]]][[[[[[]]]]]][[[[[[[[]]]]]]]]][[[[[[]]]]]]]][[[[[[[[]]]]]][[[[[[[]]]]]]]]][[[[[[[]]]]]]]]][[[[[[[[]]]]]]][[[

Postconditions:

<other->get_id() ==fiber::id()>и<get_id()>возвращает значение<other.get_id()>до назначения.

Throws:

Ничего.

Destructor
~fiber();

Effects:

Если<fiber::joinable()>волокно, вызывает std::terminate. Уничтожает<*this>.

Note:

Программист должен убедиться, что деструктор никогда не выполняется, пока волокно все еще<fiber::joinable()>. Даже если вы знаете, что волокно завершено, вы все равно должны позвонить либо<fiber::join()>, либо<fiber::detach()>, прежде чем уничтожить<fiber>объект.

Member function joinable()

bool joinable() const noexcept;

Returns:

<true>если<*this>относится к волокну исполнения, которое может или не может быть завершено; в противном случае<false>.

Throws:

Ничего.

Member function join()

void join();

Preconditions:

<fiber::joinable()>.

Effects:

Дождется завершения указанного волокна исполнения.

Postconditions:

Волокно исполнения, на которое ссылается запись, завершено.<*this>больше не относится к каким-либо волокнам исполнения.

Throws:

<fiber_error>

Error Conditions:

resource_deadlock_would_occur: if<this->get_id() ==boost::this_fiber::get_id()>.invalid_argument: if the fiber is not<fiber::joinable()>.

Member function detach()

void detach();

Preconditions:

<fiber::joinable()>.

Effects:

Волокно исполнения отделяется и больше не имеет связанного<fiber>объекта.

Postconditions:

<*this>больше не относится к каким-либо волокнам исполнения.

Throws:

<fiber_error>

Error Conditions:

недействительный_аргумент: если волокно не<fiber::joinable()>.

Member function get_id()

fiber::id get_id() const noexcept;

Returns:

Если<*this>относится к волокну исполнения, экземпляр<fiber::id>, который представляет это волокно. В противном случае возвращается построенный по умолчанию<fiber::id>.

Throws:

Ничего.

See also:

<this_fiber::get_id()>

Templated member function properties()

template< typename PROPS >
PROPS & properties();

Preconditions:

<*this>относится к волокну исполнения.<use_scheduling_algorithm()>был вызван из этой нити с подклассом<algorithm_with_properties<>>с тем же шаблонным аргументом<PROPS>.

Returns:

Ссылка на пример свойств планировщика<*this>.

Throws:

<std::bad_cast>, если<use_scheduling_algorithm()>был назван с подклассом<algorithm_with_properties>с некоторым другим параметром шаблона, чем<PROPS>.

Note:

<algorithm_with_properties<>>обеспечивает способ для закодированного пользователем планировщика связывать расширенные свойства, такие как приоритет, с экземпляром волокна. Этот метод позволяет получить доступ к этим пользовательским свойствам.

See also:

Настройка

Member function swap()

void swap( fiber & other) noexcept;

Effects:

Обменяется волокном исполнения, связанным с<*this>и<other>, поэтому<*this>становится связанным с волокном, ранее связанным с<other>, и наоборот.

Postconditions:

<this->get_id()>возвращает то же значение, что и<other.get_id()>до вызова.<other.get_id()>возвращает то же значение, что и<this->get_id()>до вызова.

Throws:

Ничего.

Non-member function swap()

void swap( fiber & l, fiber & r) noexcept;

Effects:

То же самое<l.swap(r)>.

Throws:

Ничего.

Non-member function operator<()

bool operator<( fiber const& l, fiber const& r) noexcept;

Returns:

<true>, если<l.get_id() <r.get_id()>является<true>, ложным в противном случае.

Throws:

Ничего.

Non-member function use_scheduling_algorithm()

template< typename SchedAlgo, typename ... Args >
void use_scheduling_algorithm( Args && ... args) noexcept;

Effects:

НаправляетBoost.Fiberна использование<SchedAlgo>, который должен быть конкретным подклассом<algorithm>, в качестве алгоритма планирования для всех волокон в текущей нити. Приведите все необходимые аргументы<SchedAlgo>конструктора<args>.

Note:

Если вы хотите, чтобы данный поток использовал алгоритм планирования без по умолчанию, сделайте этот вызов потока<use_scheduling_algorithm()>перед любой другойточкой входа Boost.Fiber. Если к тому времени, когда Boost.Fiberдолжен использовать текущий поток, не был установлен планировщик, библиотека создаст по умолчанию<round_robin>пример для этой нити.

Throws:

Ничего.

See also:

Расписание,Настройка

Non-member function has_ready_fibers()

bool has_ready_fibers() noexcept;

Returns:

<true>Если у планировщика есть волокна, готовые к работе.

Throws:

Ничего.

Note:

Может использоваться для кражи работы, чтобы найти праздный планировщик.


PrevUpHomeNext

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




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



:: Главная :: Fiber management ::


реклама


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

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