Class fiber
#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 ;
}}
constexpr fiber () noexcept ;
Effects:
<fiber> Пример, который относится кне-волокно .
Postconditions:
<this -> get_id ()
== fiber :: id () >
Throws:
Ничего.
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 > Распределение стоков
fiber ( fiber && other ) noexcept ;
Effects:
Передача права собственности на волокно, управляемое<other >, в вновь построенный<fiber> экземпляр.
Postconditions:
<other . get_id ()
== fiber :: id () >и<get_id () >возвращает стоимость<other . get_id () >до начала строительства.
Throws:
Ничего.
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:
Ничего.
~ fiber ();
Effects:
Если<fiber::joinable()> волокно, вызывает std::terminate. Уничтожает<* this >.
Note:
Программист должен убедиться, что деструктор никогда не выполняется, пока волокно все еще<fiber::joinable()> . Даже если вы знаете, что волокно завершено, вы все равно должны позвонить либо<fiber::join()> , либо<fiber::detach()> , прежде чем уничтожить<fiber >объект.
bool joinable () const noexcept ;
Returns:
<true >если<* this >относится к волокну исполнения, которое может или не может быть завершено; в противном случае<false >.
Throws:
Ничего.
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()> .
void detach ();
Preconditions:
<fiber::joinable()> .
Effects:
Волокно исполнения отделяется и больше не имеет связанного<fiber> объекта.
Postconditions:
<* this >больше не относится к каким-либо волокнам исполнения.
Throws:
<fiber_error >
Error Conditions:
недействительный_аргумент : если волокно не<fiber::joinable()> .
fiber :: id get_id () const noexcept ;
Returns:
Если<* this >относится к волокну исполнения, экземпляр<fiber :: id > , который представляет это волокно. В противном случае возвращается построенный по умолчанию<fiber :: id > .
Throws:
Ничего.
See also:
<this_fiber::get_id()>
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:
Настройка
void swap ( fiber & other ) noexcept ;
Effects:
Обменяется волокном исполнения, связанным с<* this >и<other >, поэтому<* this >становится связанным с волокном, ранее связанным с<other >, и наоборот.
Postconditions:
<this -> get_id () >возвращает то же значение, что и<other . get_id () >до вызова.<other . get_id () >возвращает то же значение, что и<this -> get_id () >до вызова.
Throws:
Ничего.
void swap ( fiber & l , fiber & r ) noexcept ;
Effects:
То же самое<l . swap ( r ) >.
Throws:
Ничего.
bool operator <( fiber const & l , fiber const & r ) noexcept ;
Returns:
<true >, если<l . get_id ()
< r . get_id () >является<true >, ложным в противном случае.
Throws:
Ничего.
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:
Расписание ,Настройка
bool has_ready_fibers () noexcept ;
Returns:
<true >Если у планировщика есть волокна, готовые к работе.
Throws:
Ничего.
Note:
Может использоваться для кражи работы, чтобы найти праздный планировщик.
Статья Class fiber раздела Chapter 1. Fiber Fiber management может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Fiber management ::