...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
![]() |
Note |
---|---|
Table 30.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 30.3. [@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 30.4. 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 30.5. 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 |
- |
X.1.1.2 |
value_pop |
no |
renamed pull with two flavors + a ptr_pull that returns a sharted_ptr<>. |
X.1.2 |
Non-waiting operations |
- |
- |
X.1.2.1 |
try_push |
Partial |
return bool instead |
X.1.2.2 |
try_pop |
Partial |
renamed try_pull, returns null |
X.1.3 |
Non-blocking operations |
- |
- |
X.1.3.1 |
nonblocking_push |
Partial |
renamed try_push(no_block, |
X.1.3.2 |
nonblocking_pop |
Partial |
renamed try_pop(no_block, |
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 |
- |
X.1.5.3 |
wait_push |
Partial |
- |
X.1.5.4 |
wait_pop |
Partial |
- |
X.1.5.5 |
wait_push_front |
no |
- |
X.1.5.6 |
wait_pop |
Partial |
- |
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 considere 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 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 |
- |
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 |
- |
While Boost.Thread implementation of executors would not use dynamic polymorphism, it is worth comparing with the current trend on the standard.
Table 30.6. Asynchronous Executors
Section |
Description |
Status |
Comments |
---|---|---|---|
30.X.1 |
Class executor |
No |
- |
30.X.1.1 |
add |
No |
renamed with a function template submit |
30.X.1.1 |
num_of_pendin_closures |
?? |
|
30.X.2 |
Class sceduled_executor |
No |
- |
30.X.2.1 |
add_at |
No |
renamed with a function template submit_at |
30.X.2.2 |
add_after |
No |
renamed with a function template submit_after |
30.X.3 |
Executor utilities functions |
No |
- |
30.X.3.1 |
default_executor |
No |
- |
30.X.3.2 |
set_default_executor |
No |
- |
30.X.3.3 |
singleton_inline_executor |
No |
- |
30.X.4 |
Concrete executor classes |
No |
- |
30.X.4.1 |
loop_executor |
No |
- |
30.X.4.1 |
serial_executor |
No |
- |
30.X.4.1 |
thread_pool |
No |
#8513 |
![]() |
Note |
---|---|
These functions are based on the N3634 - Improvements to std::future<T> and related APIs C++1y proposal by N. Gustafsson, A. Laksberg, H. Sutter, S. Mithani. |
Table 30.7. Improvements to std::future<T> and related APIs]
Section |
Description |
Status |
Comments |
---|---|---|---|
30.6.6 |
Class template future |
Partial |
- |
30.6.6.1 |
then |
Partial |
executor interface missing #8516 |
30.6.6.2 |
unwrap |
Yes |
- |
30.6.6.3 |
ready |
Partial |
is_ready |
30.6.7 |
Class template shared_future |
Partial |
- |
30.6.7.1 |
then |
Yes |
executor interface missing #8516 |
30.6.7.2 |
unwrap |
No |
#XXXX |
30.6.7.3 |
ready |
Partial |
is_ready |
30.6.X |
Function template when_any |
No |
#7446 |
30.6.X |
Function template when_all |
No |
#7447 |
30.6.X |
Function template make_ready_future |
Yes |
- |
30.6.8 |
Function template async |
No |
executor interface missing #7448 |
While Boost.Thread implementation of stream mutexes differ in the approach, it is worth comparing with the current trend on the standard.
![]() |
Note |
---|---|
N3535 - C++ Stream Mutexes. This has been replaced already by N3678 - C++ Stream Guards. |
Table 30.8. C++ C++ Stream MutexesConformance
Section |
Description |
Status |
Comments |
---|---|---|---|
X.1 |
Class template stream_mutex |
Partial |
externally_locked_stream<> |
X.2.1 |
constructor |
Partial |
externally_locked_stream needs a mutex in addition as argumement. |
X.2.2 |
lock |
yes |
- |
X.2.3 |
unlock |
yes |
- |
X.2.4 |
try_lock |
yes |
- |
X.2.5 |
hold |
Yes |
- |
X.2.6 |
bypass |
Yes |
- |
X.2 |
Class template stream_guard |
Yes |
- |
X.2.1 |
stream_guard |
Yes |
- |
X.2.2 |
~stream_guard |
Yes |
- |
X.2.3 |
bypass |
Yes |
- |
X.3 |
Stream Operators |
Yes |
. |
X.4 |
Predefined Objects |
No |
. |