Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Conformance and Extension

C++11 standard Thread library
C++14 standard Thread library - accepted changes
C++14 TS Extensions for Concurrency V1
C++1z TS Concurrency - On going proposals

]

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. 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 30.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 30.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 30.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 30.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 30.8. Asynchronous Executors

Section

Description

Status

Comments

V.1.1

Class executor

Yes

-

V.1.1

add

Yes

renamed with a function template submit

V.1.1

num_of_pendin_closures

No

V.1.2

Class sceduled_executor

No

-

V.1.2

add_at

No

renamed with a function template submit_at

V.1.2

add_after

No

renamed with a function template submit_after

V.2

Concrete executor classes

No

-

V.2.1

thread_pool

Yes

static version Basic_thread_pool, dynamic one execduler_adaptor<basic_thread_pool>

V.2.2

serial_executor

yes

-

V.2.3

loop_executor

Yes

static version loop_scheduler, dynamic one execduler_adaptor<loop_scheduler>

V.2.4

inline_executor

Yes

static version inline_executor, dynamic one execduler_adaptor<inline_executor>

V.2.5

thread_executor

Yes

static version thread_executor, dynamic one execduler_adaptor<thread_executor>


Table 30.9. `async, future/shared_future::then`and Executors

Section

Description

Status

Comments

30.6.6

future<T>::then

Yes

30.6.7

shared_future<T>::then

Yes

30.6.8

async

Yes

-


While Boost.Thread implementation of stream mutexes differ in the approach, it is worth comparing with the current trend on the standard.

[Note] Note

These functions are based on N3535 - C++ Stream Mutexes by Lawrence Crowl.

[Note] Note

This proposal has been replaced already by N3678 - C++ Stream Guards, which has been replaced by N3665 - Uninterleaved String Output Streaming and N3750 - C++ Ostream Buffers

Table 30.10. C++ Stream Mutexes Conformance

Section

Description

Status

Comments

X.1

Class template stream_mutex

Partial

Renamed externally_locked_stream<>

X.2.1

constructor

Partial

externally_locked_stream needs a mutex in addition as argument.

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

-



PrevUpHomeNext