The Boost.Fiber candidate library by Oliver Kowalke begins a
mini-review today, Monday May 23, which will close Wednesday June 1.
It was last reviewed in September 2015; the verdict at that time was
"not yet." Oliver has been working steadily to address review comments
and to improve the library in other ways, and has brought the library
back for mini-review.
I believe it is Oliver's intention to respond to review feedback on
the develop branch, leaving the master branch stable during the
I will monitor reviews and discussion on both the boost-users@ list
and the boost@ developers' list. Please include at least "fiber" and
"review" in the subject line of your mail, e.g. by replying to this
message. (Please reply to only ONE list, however.)
Here follows a synopsis of issues raised during the September 2015 review:
Cross-thread fiber migration: Evidently the community strongly desires
the ability to transfer a suspended fiber from one thread to
another. Now supported, with documentation.
Cross-thread migration support implies a requirement to document the
thread safety requirements of the customization API. Addressed.
Standard required timing specifications: meet (30.2.4 Timing
specifications [thread.req.timing]). Addressed.
Adapt one or more existing test suites for thread facilities to
validate the correctness of the Fiber library's synchronization
constructs. The requester clarified in private mail that I misstated
his suggestion: he wanted Oliver to review one or more such test
suites to discover the kinds of issues that can arise with thread
synchronization constructs. He has professed himself satisfied with
the current state of the Fiber library's synchronization constructs.
std::chrono support: ensure that wait_until() can accept any supported
time_point specialization. Addressed.
C++11 compatibility. Addressed.
Document that this_fiber::yield() (et al.) are valid from main(), or
in general from a thread function, as well as from explicitly-launched
Make shared_state lock requirements explicit: for example, make
mark_ready_and_notify_() accept a std::unique_lock<>& (or &&) to force
its caller to provide one. Addressed.
Avoid holding mutex during condition_variable::notify_*() calls. Addressed.
packaged_task must not decay-copy its task arguments. Addressed.
Align fibers::async() signature, result description and invoke_helper
implementation with std::async(). Avoid returning std::move(...). Addressed.
Wait list implementation: try an intrusive linked list of
fiber_context objects. Addressed.
Avoid sleeping thread when no fibers are ready -- block on external
event. Better handling of waiting tasks (decentralized wait queues?). Addressed.
Optimization to resume awakened fiber on the thread that awakens it.
Template redundancy: eliminate duplication between specializations for
T, T& and void. The future, shared_future, shared_state, promise and
task_object templates were specifically cited. Addressed.