123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- [/
- Copyright Oliver Kowalke 2013.
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt
- ]
- [library Fiber
- [quickbook 1.5]
- [authors [Kowalke, Oliver]]
- [copyright 2013 Oliver Kowalke]
- [id fiber]
- [purpose C++ Library to cooperatively schedule and synchronize micro-threads]
- [category text]
- [license
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- [@http://www.boost.org/LICENSE_1_0.txt])
- ]
- ]
- [/ important especially for [,] to avoid a space between empty argument
- brackets and expansion: the space, if any, becomes part of the expansion!]
- [template mdash[]'''—''']
- [template ,[]'''’''']
- [template "[text]'''“'''[text]'''”''']
- [template superscript[exp]'''<superscript>'''[exp]'''</superscript>''']
- [/ "isn[t]" is slightly more readable than "isn[,]t", and so forth]
- [template s[][,]s]
- [template t[][,]t]
- [template class_heading[class_name]
- [hding class_[class_name]..Class [`[class_name]]]
- ]
- [template class_link[class_name][dblink class_[class_name]..[`[class_name]]]]
- [template template_heading[class_name]
- [hding class_[class_name]..Template [`[class_name]<>]]
- ]
- [template template_link[class_name][dblink class_[class_name]..[`[class_name]<>]]]
- [template member_heading[class_name method_name]
- [operator_heading [class_name]..[method_name]..[method_name]]
- ]
- [template member_link[class_name method_name][operator_link [class_name]..[method_name]..[method_name]]]
- [template operator_heading[class_name method_name method_text]
- [hding [class_name]_[method_name]..Member function [`[method_text]]()]
- ]
- [template operator_link[class_name method_name method_text][dblink [class_name]_[method_name]..[`[class_name]::[method_text]()]]]
- [template template_member_heading[class_name method_name]
- [hding [class_name]_[method_name]..Templated member function [`[method_name]]()]
- ]
- [template template_member_link[class_name method_name][member_link [class_name]..[method_name]]]
- [template static_member_heading[class_name method_name]
- [hding [class_name]_[method_name]..Static member function [`[method_name]]()]
- ]
- [template static_member_link[class_name method_name][member_link [class_name]..[method_name]]]
- [template data_member_heading[class_name member_name]
- [hding [class_name]_[member_name]..Data member [`[member_name]]]
- ]
- [template data_member_link[class_name member_name][dblink [class_name]_[member_name]..[`[class_name]::[member_name]]]]
- [template function_heading[function_name]
- [hding [function_name]..Non-member function [`[function_name]()]]
- ]
- [template function_link[function_name][dblink [function_name]..[`[function_name]()]]]
- [template function_heading_for[function_name arg]
- [hding [function_name]\_for\_[arg]..Non-member function [`[function_name]()]]
- ]
- [template function_link_for[function_name arg][dblink [function_name]\_for\_[arg]..[`[function_name]()]]]
- [template ns_class_heading[namespace class_name]
- [hding class_[namespace]_[class_name]..Class [`[namespace]::[class_name]]]
- ]
- [template ns_class_link[namespace class_name][dblink class_[namespace]_[class_name]..[`[namespace]::[class_name]]]]
- [template ns_member_heading[namespace class_name method_name]
- [ns_operator_heading [namespace]..[class_name]..[method_name]..[method_name]]
- ]
- [template ns_member_link[namespace class_name method_name][ns_operator_link [namespace]..[class_name]..[method_name]..[method_name]]]
- [template ns_operator_heading[namespace class_name method_name method_text]
- [hding [namespace]_[class_name]_[method_name]..Member function [`[method_text]]()]
- ]
- [template ns_operator_link[namespace class_name method_name method_text][dblink [namespace]_[class_name]_[method_name]..[`[namespace]::[class_name]::[method_text]()]]]
- [template ns_data_member_heading[namespace class_name member_name]
- [hding [namespace]_[class_name]_[member_name]..Data member [`[member_name]]]
- ]
- [template ns_data_member_link[namespace class_name member_name][dblink [namespace]_[class_name]_[member_name]..[`[namespace]::[class_name]::[member_name]]]]
- [template ns_function_heading[namespace function_name]
- [hding [namespace]_[function_name]..Non-member function [`[namespace]::[function_name]()]]
- ]
- [template ns_function_link[namespace function_name][dblink [namespace]_[function_name]..[`[namespace]::[function_name]()]]]
- [template anchor[name]'''<anchor id="'''[name]'''"/>''']
- [template hding[name title]
- '''<bridgehead renderas="sect4" id="'''[name]_bridgehead'''">
- <phrase id="'''[name]'''"/>
- <link linkend="'''[name]'''">'''[title]'''</link>
- </bridgehead>'''
- ]
- [template dblink[id text]'''<link linkend="'''[id]'''">'''[text]'''</link>''']
- [template `[text]'''<code>'''[text]'''</code>''']
- [def __boost_asio__ [@http://www.boost.org/doc/libs/release/libs/asio/index.html Boost.Asio]]
- [def __boost_context__ [@http://www.boost.org/doc/libs/release/libs/context/index.html Boost.Context]]
- [def __boost_fiber__ [*Boost.Fiber]]
- [def __boost_intrusive__ [@http://www.boost.org/doc/libs/release/libs/intrusive/index.html Boost.Intrusive]]
- [def __boost_thread__ [@http://www.boost.org/doc/libs/release/libs/thread/index.html Boost.Thread]]
- [def __std_thread__ [@http://en.cppreference.com/w/cpp/thread standard thread support library]]
- [def __async_result__ ['async-result]]
- [def __blocked__ [link blocking ['blocked]]]
- [def __lockable_concept__ ['lockable concept]]
- [def __not_a_fiber__ ['not-a-fiber]]
- [def __rendezvous__ ['rendezvous]]
- [def __allocator_arg_t__ [@http://en.cppreference.com/w/cpp/memory/allocator_arg_t `std::allocator_arg_t`]]
- [def __Allocator__ [@http://en.cppreference.com/w/cpp/concept/Allocator `Allocator`]]
- [def __allocator__ [@http://en.cppreference.com/w/cpp/memory/allocator `std::allocator< T >`]]
- [def __barrier__ [class_link barrier]]
- [def __cc__ [@http://www.boost.org/doc/libs/release/libs/context/doc/html/context/cc.html ['call/cc]]]
- [def __condition__ [class_link condition_variable]]
- [def __fcontext__ `fcontext_t`]
- [def __fiber__ [class_link fiber]]
- [def __fiber_error__ `fiber_error`]
- [def __fiber_error__ `fiber_error`]
- [def __fiber_group__ [class_link fiber_group]]
- [def __fibers__ `fibers`]
- [def __fixedsize_stack__ [class_link fixedsize_stack]]
- [def __future_error__ `future_error`]
- [def __future__ [template_link future]]
- [def __joinable__ [member_link fiber..joinable]]
- [def __lock_error__ `lock_error`]
- [def __mutex__ [class_link mutex]]
- [def __numa_work_stealing__ [ns_class_link numa..work_stealing]]
- [def __ofixedsize_stack__ [class_link pooled_fixedsize_stack]]
- [def __packaged_task__ [template_link packaged_task]]
- [def __pfixedsize_stack__ [class_link protected_fixedsize_stack]]
- [def __promise__ [template_link promise]]
- [def __recursive_mutex__ [class_link recursive_mutex]]
- [def __recursive_timed_mutex__ [class_link recursive_timed_mutex]]
- [def __round_robin__ [class_link round_robin]]
- [def __segmented_stack__ [class_link segmented_stack]]
- [def __segmented_stack_stack__ ['segmented_stack-stack]]
- [def __shared_future__ [template_link shared_future]]
- [def __shared_work__ [class_link shared_work]]
- [def __stack_allocator_concept__ [link stack_allocator_concept ['stack-allocator concept]]]
- [def __StackAllocator__ [link stack_allocator_concept `StackAllocator`]]
- [def __stack_allocator__ ['stack_allocator]]
- [def __stack_context__ [@http://www.boost.org/doc/libs/release/libs/context/doc/html/context/stack/stack_context.html `stack_context`]]
- [def __timed_mutex__ [class_link timed_mutex]]
- [def __ucontext__ `ucontext_t`]
- [def __unique_lock__ [@http://en.cppreference.com/w/cpp/thread/unique_lock `std::unique_lock`]]
- [def __wait_for__ [member_link future..wait_for]]
- [def __wait__ [member_link future..wait]]
- [def __wait_until__ [member_link future..wait_until]]
- [def __winfib__ `WinFiber`]
- [def __work_stealing__ [class_link work_stealing]]
- [def __no_state__ `future_errc::no_state`]
- [def __broken_promise__ `future_errc::broken_promise`]
- [def __already_retrieved__ `future_errc::future_already_retrieved`]
- [def __already_satisfied__ `future_errc::future_already_satisfied`]
- [def __algo__ [class_link algorithm]]
- [def __algo_awakened__ [member_link algorithm..awakened]]
- [def __algo_pick_next__ [member_link algorithm..pick_next]]
- [def __async__ `async()`]
- [def __barrier_wait__ [member_link barrier..wait]]
- [def __cond_wait_for__ [member_link condition_variable..wait_for]]
- [def __cond_wait__ [member_link condition_variable..wait]]
- [def __cond_wait_until__ [member_link condition_variable..wait_until]]
- [def __cond_any_wait_for__ [member_link condition_variable_any..wait_for]]
- [def __cond_any_wait__ [member_link condition_variable_any..wait]]
- [def __cond_any_wait_until__ [member_link condition_variable_any..wait_until]]
- [def __context_attach__ [member_link context..attach]]
- [def __context_detach__ [member_link context..detach]]
- [def __detach__ [member_link fiber..detach]]
- [def __fiber_id__ [dblink class_fiber_id..`fiber::id`]]
- [def __fsp__ [class_link fiber_specific_ptr]]
- [def __future_get__ [member_link future..get]]
- [def __get_id__ [member_link fiber..get_id]]
- [def __io_service__ [@http://www.boost.org/doc/libs/release/doc/html/boost_asio/reference/io_service.html `boost::asio::io_service`]]
- [def __join__ [member_link fiber..join]]
- [def __mutex_lock__ [member_link mutex..lock]]
- [def __mutex_try_lock__ [member_link mutex..try_lock]]
- [def __run_service__ `boost::fibers::asio::run_svc()`]
- [def __shared_future_get__ [member_link shared_future..get]]
- [def __sleep_for__ [ns_function_link this_fiber..sleep_for]]
- [def __sleep_until__ [ns_function_link this_fiber..sleep_until]]
- [def __yield_context__ ['boost::asio::yield_context]]
- [def __yield_fiber__ ['boost::fibers::asio::yield_context]]
- [def __yield__ [ns_function_link this_fiber..yield]]
- [def __lock__ `lock()`]
- [def __try_lock_for__ `try_lock_for()`]
- [def __try_lock__ `try_lock()`]
- [def __try_lock_until__ `try_lock_until()`]
- [def __unlock__ `unlock()`]
- [include overview.qbk]
- [include fiber.qbk]
- [include scheduling.qbk]
- [include stack.qbk]
- [#synchronization]
- [section:synchronization Synchronization]
- In general, __boost_fiber__ synchronization objects can neither be moved nor
- copied. A synchronization object acts as a mutually-agreed rendezvous point
- between different fibers. If such an object were copied somewhere else, the
- new copy would have no consumers. If such an object were ['moved] somewhere
- else, leaving the original instance in an unspecified state, existing
- consumers would behave strangely.
- The fiber synchronization objects provided by this library will, by default,
- safely synchronize fibers running on different threads. However, this level of
- synchronization can be removed (for performance) by building the library with
- [*`BOOST_FIBERS_NO_ATOMICS`] defined. When the library is built with that macro,
- you must ensure that all the fibers referencing a particular synchronization
- object are running in the same thread.
- [include mutexes.qbk]
- [include condition_variables.qbk]
- [include barrier.qbk]
- [section:channels Channels]
- A channel is a model to communicate and synchronize `Threads of Execution`
- [footnote The smallest ordered sequence of instructions that can be managed
- independently by a scheduler is called a `Thread of Execution`.] via message
- passing.
- [#class_channel_op_status]
- [heading Enumeration `channel_op_status`]
- channel operations return the state of the channel.
- enum class channel_op_status {
- success,
- empty,
- full,
- closed,
- timeout
- };
- [heading `success`]
- [variablelist
- [[Effects:] [Operation was successful.]]
- ]
- [heading `empty`]
- [variablelist
- [[Effects:] [channel is empty, operation failed.]]
- ]
- [heading `full`]
- [variablelist
- [[Effects:] [channel is full, operation failed.]]
- ]
- [heading `closed`]
- [variablelist
- [[Effects:] [channel is closed, operation failed.]]
- ]
- [heading `timeout`]
- [variablelist
- [[Effects:] [The operation did not become ready before specified timeout elapsed.]]
- ]
- [include buffered_channel.qbk]
- [include unbuffered_channel.qbk]
- [endsect]
- [include futures.qbk]
- [endsect]
- [include fls.qbk]
- [/[include asio.qbk]]
- [include migration.qbk]
- [include callbacks.qbk]
- [include nonblocking.qbk]
- [include when_any.qbk]
- [include integration.qbk]
- [include speculative.qbk]
- [include numa.qbk]
- [section GPU computing]
- [include cuda.qbk]
- [include hip.qbk]
- [endsect]
- [include worker.qbk]
- [include performance.qbk]
- [include tuning.qbk]
- [include customization.qbk]
- [include rationale.qbk]
- [include acknowledgements.qbk]
|