...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
]
Table 39.2. C++11 standard Conformance
Section |
Description |
Status |
Comments |
Ticket |
---|---|---|---|---|
30 |
Thread support library |
Yes |
- |
- |
30.1 |
General |
- |
- |
- |
30.2 |
Requirements |
- |
- |
- |
30.2.1 |
Template parameter names |
- |
- |
- |
30.2.2 |
Exceptions |
Yes |
- |
- |
30.2.3 |
Native handles |
Yes |
- |
- |
30.2.4 |
Timing specifications |
Yes |
- |
- |
30.2.5 |
Requirements for Lockable types |
Yes |
- |
- |
30.2.5.1 |
In general |
- |
- |
- |
30.2.5.2 |
BasicLockable requirements |
Yes |
- |
- |
30.2.5.3 |
Lockable requirements |
yes |
- |
- |
30.2.5.4 |
TimedLockable requirements |
Yes |
- |
- |
30.2.6 |
decay_copy |
- |
- |
- |
30.3 |
Threads |
Yes |
- |
- |
30.3.1 |
Class thread |
Yes |
- |
- |
30.3.1.1 |
Class thread::id |
Yes |
- |
- |
30.3.1.2 |
thread constructors |
Partial |
- |
- |
30.3.1.3 |
thread destructor |
Yes |
- |
- |
30.3.1.4 |
thread assignment |
Yes |
- |
- |
30.3.1.5 |
thread members |
Yes |
- |
- |
30.3.1.6 |
thread static members |
Yes |
- |
- |
30.3.1.7 |
thread specialized algorithms |
Yes |
- |
- |
30.3.2 |
Namespace this_thread |
Yes |
- |
- |
30.4 |
Mutual exclusion |
Partial |
- |
- |
30.4.1 |
Mutex requirements |
Yes |
- |
- |
30.4.1.1 |
In general |
Yes |
- |
- |
30.4.1.2 |
Mutex types |
Yes |
- |
- |
30.4.1.2.1 |
Class mutex |
Yes |
- |
- |
30.4.1.2.2 |
Class recursive_mutex |
Yes |
- |
- |
30.4.1.3 |
Timed mutex types |
Yes |
- |
- |
30.4.1.3.1 |
Class timed_mutex |
Yes |
- |
- |
30.4.1.3.1 |
Class recursive_timed_mutex |
Yes |
- |
- |
30.4.2 |
Locks |
Yes |
- |
- |
30.4.2.1 |
Class template lock_guard |
Yes |
- |
- |
30.4.2.2 |
Class template unique_lock |
Yes |
- |
- |
30.4.2.2.1 |
unique_lock constructors, destructor, and assignment |
Yes |
- |
- |
30.4.2.2.2 |
unique_lock locking |
Yes |
- |
- |
30.4.2.2.3 |
unique_lock modifiers |
Yes |
- |
- |
30.4.2.2.4 |
unique_lock observers |
Yes |
- |
- |
30.4.3 |
Generic locking algorithms |
Partial |
variadic |
#6227 |
30.4.4 |
Call once |
Yes |
- |
- |
30.4.4.1 |
Struct once_flag |
Yes |
- |
- |
30.4.4.2 |
Function call_once |
Yes |
- |
- |
30.5 |
Condition variables |
Yes |
- |
- |
30.5.1 |
Class condition_variable |
Yes |
- |
- |
30.5.2 |
Class condition_variable_any |
Yes |
- |
- |
30.6 |
Futures |
Yes |
- |
- |
30.6.1 |
Overview |
Partial |
- |
- |
30.6.2 |
Error handling |
Yes |
- |
- |
30.6.3 |
Class future_error |
- |
- |
- |
30.6.4 |
Shared state |
- |
- |
- |
30.6.5 |
Class template promise |
Yes |
- |
- |
30.6.6 |
Class template future |
Yes |
- |
- |
30.6.7 |
Class template shared_future |
Yes |
- |
- |
30.6.8 |
Function template async |
Yes |
- |
- |
30.6.9 |
Class template packaged_task |
Yes |
- |
- |
Table 39.3. Extension
Section |
Description |
Comments |
---|---|---|
30.3.1.5.x |
interrupt |
- |
30.3.2.x |
Interruption |
- |
30.3.2.y |
at_thread_exit |
- |
30.4.3.x |
Generic locking algorithms begin/end |
- |
Table 39.4. [@http://isocpp.org/files/papers/N3659.html N3659 Shared locking in C++ revision 2] Conformance
Section |
Description |
Status |
Comments |
---|---|---|---|
30.4.1.4 |
Shared Lockables Types |
Yes |
- |
30.4.1.4.1 |
shared_mutex class |
Yes |
- |
30.4.2.3 |
Class template shared_lock |
Yes |
- |
Table 39.5. Improvements to std::future<T> and related APIs]
Section |
Description |
Status |
Comments |
---|---|---|---|
2.1 |
- |
- |
- |
2.2 |
Class template future |
Partial |
- |
2.2 |
then |
Partial |
without implicit unwrapping #10550 and blocking #10551 |
2.2 |
is_ready |
Yes |
- |
2.3 |
Class template shared_future |
Partial |
- |
2.3 |
then |
Partial |
Without implicit unwrapping #10550 and blocking #10551 |
2.3 |
is_ready |
Yes |
- |
2.4 |
Function template when_all |
Partial |
interface not complete #10426 and blocking #10551 |
2.5 |
Function template when_any |
Partial |
interface not complete #10427 and blocking #10551 |
2.6 |
Function template when_any_back |
No |
#XXXX |
2.7 |
Function template make_ready_future |
Yes |
- |
Table 39.6. C++ Latches and Barriers Conformance
Section |
Description |
Status |
Comments |
---|---|---|---|
X.1 |
Class latch |
Partial |
A new class latch has been added. The interface is a super set of the one of the proposal, taking some of the functions of the class barrier. |
X.2 |
Class barrier |
No |
Even if Boost.Thread has a class boost:barrier it doesn't provides the same kind of services. There is an experimental completion_latch that could be used instead. |
Table 39.7. C++ Concurrent Queues Conformance
Section |
Description |
Status |
Comments |
---|---|---|---|
X.1 |
Conceptual interface |
Partial |
The interface provided has some differences respect to this proposal. All the functions having a queue_op_status are not provided. No lock-free concrete classes |
X.1.1 |
Basic Operations |
Partial |
- |
X.1.1.1 |
push |
yes |
renamed push_back. |
X.1.1.2 |
value_pop |
no |
renamed pull_front with two flavors. |
X.1.2 |
Non-waiting operations |
- |
- |
X.1.2.1 |
try_push |
yes |
renamed try_push_back |
X.1.2.2 |
try_pop |
yes |
renamed try_pull_back |
X.1.3 |
Non-blocking operations |
- |
- |
X.1.3.1 |
nonblocking_push |
Yes |
renamed nonblocking_push_back |
X.1.3.2 |
nonblocking_pop |
Yes |
renamed nonblocking_pull_front |
X.1.4 |
Push-front operations |
No |
- |
X.1.5 |
Closed queues |
Partial |
- |
X.1.5.1 |
close |
Yes |
- |
X.1.5.2 |
is_closed |
Yes |
renamed closed |
X.1.5.3 |
wait_push |
Yes |
renamed wait_push_back |
X.1.5.4 |
wait_pop |
Yes |
renamed wait_pull_front |
X.1.5.5 |
wait_push_front |
no |
- |
X.1.5.6 |
wait_pop_back |
no |
- |
X.1.5.6 |
open |
no |
- |
X.1.6 |
Empty and Full Queues |
Yes |
- |
X.1.6.1 |
is_empty |
Yes |
- |
X.1.6.2 |
is_full |
Yes |
Added capacity |
X.1.7 |
Queue Names |
No |
Not considered a must for the time been. |
X.1.8 |
Element Type Requirements |
Yes? |
- |
X.1.9 |
Exception Handling |
Yes? |
- |
X.1.10 |
Queue Ordering |
Yes? |
- |
X.1.11 |
Lock-Free Implementations |
No |
waiting to stabilize the lock-based interface. Will use Boost.LockFree once it is Boost.Move aware. |
X.2 |
Concrete queues |
Partial |
- |
X.2.1 |
Locking Buffer Queue |
Partial |
classes sync_queue and a sync_bounded_queue. |
X.2.1 |
Lock-Free Buffer Queue |
No |
waiting to stabilize the lock-based interface. Will use Boost.LockFree once it is Boost.Move aware. |
X.3 |
Additional Conceptual Tools |
No |
- |
X.3.1 |
Fronts and Backs |
No |
- |
X.3.2 |
Streaming Iterators |
No |
- |
X.3.3 |
Storage Iterators |
No |
- |
X.3.4 |
Binary Interfaces |
No |
- |
X.3.4 |
Managed Indirection |
No |
- |
Table 39.8. Executors and Schedulers
Section |
Description |
Status |
Comments |
---|---|---|---|
V.1.1 |
Class |
Yes |
- |
V.1.1 |
|
Yes |
renamed with a function template |
V.1.1 |
|
No |
|
V.1.2 |
Class sceduled_executor |
No |
- |
V.1.2 |
|
No |
renamed with a function template |
V.1.2 |
|
No |
renamed with a function template |
V.2 |
Concrete executor classes |
No |
- |
V.2.1 |
|
Yes |
static version |
V.2.2 |
|
yes |
- |
V.2.3 |
|
Yes |
static version loop_scheduler, dynamic one |
V.2.4 |
|
Yes |
static version |
V.2.5 |
|
Yes |
static version |
Table 39.9. `async, future/shared_future::then`and Executors
Section |
Description |
Status |
Comments |
---|---|---|---|
30.6.6 |
|
Yes |
|
30.6.7 |
|
Yes |
|
30.6.8 |
|
Yes |
- |
Table 39.10. Executors and Schedulers - revision 4
Section |
Description |
Status |
Comments |
||
---|---|---|---|---|---|
VI.A |
Executor Concept |
Yes |
|
Yes |
renamed |
VI.A.2 |
|
Yes |
renamed |
||
VI.A.3 |
|
No |
- |
||
VI.A.4 |
|
Yes |
- |
||
VI.A.5 |
|
yes |
- |
||
VI.B |
|
yes |
- |
||
VI.C |
|
yes |
renamed |
||
VI.D |
Free Functions and Helper Objects |
partial |
- |
||
VI.D |
|
No |
- |
||
VI.D |
|
No |
|
||
VI.D |
|
No |
- |
||
VI.D |
|
No |
renamed |
||
VI.D |
|
No |
renamed |
||
VI.D |
|
Partial |
renamed |