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 31.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 31.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 31.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 31.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 31.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] 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 31.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] Note

N3535 - C++ Stream Mutexes. This has been replaced already by N3678 - C++ Stream Guards.

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

.



PrevUpHomeNext