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++1y TS Concurrency - On going proposals

]

Table 32.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 32.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 32.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 32.5. 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 32.6. 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

-


While Boost.Thread implementation of executors would not use dynamic polymorphism, it is worth comparing with the current trend on the standard.

Table 32.7. 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>


[Note] Note

These functions are based on N3634 - Improvements to std::future<T> and related APIs C++1y proposal by N. Gustafsson, A. Laksberg, H. Sutter, S. Mithani.

Table 32.8. Improvements to std::future<T> and related APIs]

Section

Description

Status

Comments

30.6.6

Class template future

Partial

-

30.6.6

unwrap constructor

Yes

-

30.6.6

then

Yes

-

30.6.6

unwrap

Yes

-

30.6.6

ready

Partial

is_ready

30.6.7

Class template shared_future

Partial

-

30.6.6

unwrap constructor

Yes

-

30.6.7

then

Yes

-

30.6.7

unwrap

No

#XXXX

30.6.7

ready

Partial

is_ready

30.6.X

Function template when_all

Partial

interface not complete #7447

30.6.X

Function template when_any

Partial

interface not complete #7446

30.6.X

Function template when_any_swaped

No

#XXXX

30.6.X

Function template make_ready_future

Yes

-

30.6.8

Function template 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 32.9. 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