• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[/
2  (C) Copyright 2011-2015 Vicente J. Botet Escriba.
3  Distributed under the Boost Software License, Version 1.0.
4  (See accompanying file LICENSE_1_0.txt or copy at
5  http://www.boost.org/LICENSE_1_0.txt).
6]
7
8[section:compliance Conformance and Extension]
9[////////////////////////////////////////////]
10
11[section:cpp11 C++11 standard Thread library]
12[///////////////////////////////////////////]
13
14[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.html C++11 - Standard for Programming Language C++]]]
15
16
17[table C++11 standard Conformance
18    [[Section]        [Description]  [Status] [Comments] [Ticket]]
19    [[30]        [Thread support library]  [Yes] [-] [-]]
20    [[30.1]        [General]  [-] [-] [-]]
21    [[30.2]        [Requirements]  [-] [-] [-]]
22    [[30.2.1]        [Template parameter names]  [-] [-] [-]]
23    [[30.2.2]        [Exceptions]  [Yes] [-] [-]]
24    [[30.2.3]        [Native handles]  [Yes] [-] [-]]
25    [[30.2.4]        [Timing specifications]  [Yes] [-] [-]]
26    [[30.2.5]        [Requirements for Lockable types]  [Yes] [-] [-]]
27    [[30.2.5.1]        [In general]  [-] [-] [-]]
28    [[30.2.5.2]        [BasicLockable requirements]  [Yes] [-] [-]]
29    [[30.2.5.3]        [Lockable requirements]  [yes] [-] [-]]
30    [[30.2.5.4]        [TimedLockable requirements]  [Yes] [-] [-]]
31    [[30.2.6]        [decay_copy]  [-] [-] [-]]
32    [[30.3]        [Threads]  [Yes] [-] [-]]
33    [[30.3.1]        [Class thread]  [Yes] [-] [-]]
34    [[30.3.1.1]        [Class thread::id]  [Yes] [-] [-]]
35    [[30.3.1.2]        [thread constructors]  [Partial] [-] [-]]
36    [[30.3.1.3]        [thread destructor]  [Yes] [-] [-]]
37    [[30.3.1.4]        [thread assignment]  [Yes] [-] [-]]
38    [[30.3.1.5]        [thread members]  [Yes] [-] [-]]
39    [[30.3.1.6]        [thread static members]  [Yes] [-] [-]]
40    [[30.3.1.7]        [thread specialized algorithms]  [Yes] [-] [-]]
41
42    [[30.3.2]        [Namespace this_thread]  [Yes] [-] [-]]
43    [[30.4]        [Mutual exclusion]  [Partial] [-] [-]]
44    [[30.4.1]        [Mutex requirements]  [Yes] [-] [-]]
45    [[30.4.1.1]        [In general]  [Yes] [-] [-]]
46    [[30.4.1.2]        [Mutex types]  [Yes] [-] [-]]
47    [[30.4.1.2.1]        [Class mutex]  [Yes] [-] [-]]
48    [[30.4.1.2.2]        [Class recursive_mutex]  [Yes] [-] [-]]
49    [[30.4.1.3]        [Timed mutex types]  [Yes] [-] [-]]
50    [[30.4.1.3.1]        [Class timed_mutex]  [Yes] [-] [-]]
51    [[30.4.1.3.1]        [Class recursive_timed_mutex]  [Yes] [-] [-]]
52    [[30.4.2]        [Locks]  [Yes] [-] [-]]
53    [[30.4.2.1]        [Class template lock_guard]  [Yes] [-] [-]]
54    [[30.4.2.2]        [Class template unique_lock]  [Yes] [-] [-]]
55    [[30.4.2.2.1]        [unique_lock constructors, destructor, and assignment] [Yes]  [-]  [-]]
56    [[30.4.2.2.2]        [unique_lock locking]  [Yes] [-] [-]]
57    [[30.4.2.2.3]        [unique_lock modifiers]  [Yes] [-] [-]]
58    [[30.4.2.2.4]        [unique_lock observers]  [Yes] [ - ] [-]]
59    [[30.4.3]        [Generic locking algorithms]  [Partial] [variadic] [#6227]]
60    [[30.4.4]        [Call once]  [Yes] [-] [-]]
61    [[30.4.4.1]        [Struct once_flag] [Yes] [-] [-]]
62    [[30.4.4.2]        [Function call_once] [Yes] [-] [-]]
63    [[30.5]        [Condition variables]  [Yes] [-] [-]]
64    [[30.5.1]        [Class condition_variable]  [Yes] [-] [-]]
65    [[30.5.2]        [Class condition_variable_any]  [Yes] [-] [-]]
66    [[30.6]        [Futures]  [Yes] [-] [-]]
67    [[30.6.1]        [Overview]  [Partial] [-] [-]]
68    [[30.6.2]        [Error handling]  [Yes] [-] [-]]
69    [[30.6.3]        [Class future_error]  [-] [-] [-]]
70    [[30.6.4]        [Shared state]  [-] [-] [-]]
71    [[30.6.5]        [Class template promise]  [Yes] [-] [-]]
72    [[30.6.6]        [Class template future]  [Yes] [-] [-]]
73    [[30.6.7]        [Class template shared_future]  [Yes] [-] [-]]
74    [[30.6.8]        [Function template async]  [Yes] [-] [-]]
75    [[30.6.9]        [Class template packaged_task]  [Yes] [-] [-]]
76]
77
78
79[table Extension
80    [[Section]     [Description]   [Comments]]
81    [[30.3.1.5.x]        [interrupt]   [-]]
82    [[30.3.2.x]        [Interruption]  [-]]
83    [[30.3.2.y]        [at_thread_exit]  [-]]
84    [[30.4.3.x]        [Generic locking algorithms begin/end]  [-]]
85]
86
87[/
88    [[30.x]        [Thread Local Storage]  [-]]
89    [[30.y]        [Class thread_group]  [-]]
90]
91[endsect]
92[section:cxx14 C++14 standard Thread library - accepted changes]
93[//////////////////////////////////////////////////////////////]
94
95[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.html Working Draft, Standard for Programming Language C++]]
96
97
98[table [@http://isocpp.org/files/papers/N3659.html N3659 Shared locking in C++ revision 2] Conformance
99    [[Section]  [Description]  [Status] [Comments]]
100    [[30.4.1.4]      [Shared Lockables Types]  [Yes] [ - ]]
101    [[30.4.1.4.1]      [shared_mutex class]  [Yes] [ - ]]
102    [[30.4.2.3]      [Class template shared_lock]  [Yes] [-]]
103]
104
105[endsect]
106
107
108[section:cxx1y C++14 TS Extensions for Concurrency V1 ]
109[/////////////////////////////////////////////////////]
110
111[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4107.html N4107-Extensions for Concurrency]]
112
113
114[table Improvements to std::future<T> and related APIs]
115    [[Section]  [Description]  [Status] [Comments]]
116    [[2.1]      [ - ]  [ - ] [ - ]]
117    [[2.2]      [Class template future]  [Partial] [ - ]]
118    [[2.2]      [then]  [ Partial ] [ without implicit unwrapping #10550 and blocking #10551 ]]
119    [[2.2]      [is_ready]  [ Yes ] [ - ]]
120    [[2.3]      [Class template shared_future]  [Partial] [ - ]]
121    [[2.3]      [then]  [ Partial ] [ Without implicit unwrapping #10550 and blocking #10551 ]]
122    [[2.3]      [is_ready]  [ Yes ] [ - ]]
123    [[2.4]      [Function template when_all]  [Partial] [ interface not complete #10426 and blocking #10551 ]]
124    [[2.5]      [Function template when_any]  [Partial] [ interface not complete #10427 and blocking #10551 ]]
125    [[2.6]      [Function template when_any_back]  [No] [ #XXXX  ]]
126    [[2.7]      [Function template make_ready_future]  [Yes] [ - ]]
127]
128
129
130[endsect]
131
132[section:cxx1y C++1z TS Concurrency - On going proposals]
133[///////////////////////////////////////////////////////]
134
135[section:latch C++ Latches and Barriers]
136[//////////////////////////////////////]
137
138[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3600.html N3600 C++ Latches and Barriers]]
139[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3817.html N3817 C++ Latches and Barriers]]
140
141[table C++ Latches and Barriers Conformance
142    [[Section]  [Description]  [Status] [Comments]]
143    [[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.]]
144    [[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. ]]
145]
146
147[endsect]
148[section:queue C++ Concurrent Queues]
149[///////////////////////////////////]
150
151[note [@ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3533.html N3533 C++ Concurrent Queues]]
152
153[table C++ Concurrent Queues Conformance
154    [[Section]  [Description]  [Status] [Comments]]
155    [[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 ]]
156    [[X.1.1]      [Basic Operations]  [Partial] [ - ]]
157    [[X.1.1.1]      [push]  [yes] [ renamed push_back. ]]
158    [[X.1.1.2]      [value_pop]  [no] [ renamed pull_front with two flavors. ]]
159    [[X.1.2]      [Non-waiting operations]  [ - ] [ - ]]
160    [[X.1.2.1]      [try_push]  [yes] [ renamed try_push_back ]]
161    [[X.1.2.2]      [try_pop]  [yes] [ renamed try_pull_back ]]
162    [[X.1.3]      [Non-blocking operations]  [ - ] [ - ]]
163    [[X.1.3.1]      [nonblocking_push]  [Yes] [ renamed nonblocking_push_back  ]]
164    [[X.1.3.2]      [nonblocking_pop]  [Yes] [ renamed nonblocking_pull_front  ]]
165    [[X.1.4]      [Push-front operations]  [No] [ - ]]
166    [[X.1.5]      [Closed queues]  [Partial] [ - ]]
167    [[X.1.5.1]      [close]  [Yes] [ - ]]
168    [[X.1.5.2]      [is_closed]  [Yes] [ renamed closed ]]
169    [[X.1.5.3]      [wait_push]  [Yes] [ renamed wait_push_back ]]
170    [[X.1.5.4]      [wait_pop]  [Yes] [ renamed wait_pull_front ]]
171    [[X.1.5.5]      [wait_push_front]  [no] [ - ]]
172    [[X.1.5.6]      [wait_pop_back]  [no] [ - ]]
173    [[X.1.5.6]      [open]  [no] [ - ]]
174    [[X.1.6]      [Empty and Full Queues]  [Yes] [ - ]]
175    [[X.1.6.1]      [is_empty]  [Yes] [ - ]]
176    [[X.1.6.2]      [is_full]  [Yes] [ Added capacity ]]
177    [[X.1.7]      [Queue Names]  [No] [ Not considered a must for the time been. ]]
178    [[X.1.8]      [Element Type Requirements]  [Yes?] [ - ]]
179    [[X.1.9]      [Exception Handling]  [Yes?] [ - ]]
180    [[X.1.10]      [Queue Ordering]  [Yes?] [ - ]]
181    [[X.1.11]      [Lock-Free Implementations]  [No] [ waiting to stabilize the lock-based interface. Will use Boost.LockFree once it is Boost.Move aware. ]]
182    [[X.2]      [Concrete queues]  [Partial] [ - ]]
183    [[X.2.1]      [Locking Buffer Queue]  [Partial] [ classes sync_queue and a sync_bounded_queue. ]]
184    [[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. ]]
185    [[X.3]      [Additional Conceptual Tools]  [No] [ - ]]
186    [[X.3.1]      [Fronts and Backs]  [No] [ - ]]
187    [[X.3.2]      [Streaming Iterators] [No] [ - ]]
188    [[X.3.3]      [Storage Iterators]  [No] [ - ]]
189    [[X.3.4]      [Binary Interfaces]  [No] [ - ]]
190    [[X.3.4]      [Managed Indirection]  [No] [ - ]]
191]
192[endsect]
193[section:executors Executors and Schedulers]
194[//////////////////////////////////////////]
195
196[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3785.pdf N3785 Executors and Schedulers]]
197
198[table Executors and Schedulers
199    [[Section]  [Description]  [Status] [Comments]]
200    [[V.1.1]      [Class `executor`]  [Yes] [ - ]]
201    [[V.1.1]      [`add`]  [Yes] [ renamed with a function template `submit` ]]
202    [[V.1.1]      [`num_of_pendin_closures`]  [No] [    ]]
203    [[V.1.2]      [Class sceduled_executor]  [No] [ - ]]
204    [[V.1.2]      [`add_at`]  [No] [ renamed with a function template `scheduler::submit_at`   ]]
205    [[V.1.2]      [`add_after`]  [No] [ renamed with a function template `scheduler::submit_after`   ]]
206    [[V.2]      [Concrete executor classes]  [No] [ - ]]
207    [[V.2.1]      [`thread_pool`]  [Yes] [ static version `basic_thread_pool`, dynamic one `execduler_adaptor<basic_thread_pool>` ]]
208    [[V.2.2]      [`serial_executor`]  [yes] [ - ]]
209    [[V.2.3]      [`loop_executor`]  [Yes] [ static version loop_scheduler, dynamic one `execduler_adaptor<loop_scheduler>` ]]
210    [[V.2.4]      [`inline_executor`]  [Yes] [ static version `inline_executor`, dynamic one `execduler_adaptor<inline_executor>` ]]
211    [[V.2.5]      [`thread_executor`]  [Yes] [ static version `thread_executor`, dynamic one `execduler_adaptor<thread_executor>` ]]
212]
213
214[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3784.pdf N3784-Improvements to `std::future<T> and Related APIs]]
215
216[table `async, future/shared_future::then`and Executors
217    [[Section]  [Description]  [Status] [Comments]]
218    [[30.6.6]      [`future<T>::then`]  [Yes] [  ]]
219    [[30.6.7]      [`shared_future<T>::then`]  [Yes] [    ]]
220    [[30.6.8]      [`async`]  [Yes] [ - ]]
221]
222
223[note [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4143.pdf N4143-Executors and schedulers, revision 4]]
224
225[table Executors and Schedulers - revision 4
226    [[Section]  [Description]  [Status] [Comments]]
227    [[VI.A]      [Executor Concept]  [Yes] [ `wrapper_type` renamed by `work` and `spawn by `submit` ]]
228    [[VI.A.1]      [`thread_per_task_executor]  [Yes] [ renamed `thread_executor`]]
229    [[VI.A.2]      [`thread_pool_executor`]  [Yes] [ renamed `basic_thread_pool`]]
230    [[VI.A.3]      [`system_executor`]  [No] [ - ]]
231    [[VI.A.4]      [`loop_executor`]  [Yes] [ - ]]
232    [[VI.A.5]      [`serial_executor`]  [yes] [ - ]]
233    [[VI.B]      [`executor_ref`]  [yes] [ - ]]
234    [[VI.C]      [`executor`]  [yes] [ renamed `gen_executor_ref` ]]
235    [[VI.D]      [Free Functions and Helper Objects]  [partial] [ - ]]
236    [[VI.D]      [`make_package`]  [No] [ - ]]
237    [[VI.D]      [`spawn_future`]  [No] [ `async(Ex&, ...)` is similar but returns a blocking future. ]]
238    [[VI.D]      [`spawn`]  [No] [ - ]]
239    [[VI.D]      [`task_wrapper`]  [No] [ renamed `resubmitter` ]]
240    [[VI.D]      [`set_executor`]  [No] [ renamed `resubmit` ]]
241    [[VI.D]      [`function_wrapper`]  [Partial] [ renamed `work` ]]
242]
243
244[endsect]
245[//////////////////////////////////////////////////////////////
246[section:stream_mutex	C++ Stream Mutexes - C++ Stream Guards]
247[/////////////////////////////////////////////////////////////]
248
249While Boost.Thread implementation of stream mutexes differ in the approach, it is worth comparing with the current trend on the standard.
250
251[note These functions are based on [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3535.html [*N3535 - C++ Stream Mutexes]] by Lawrence Crowl.]
252
253[note This proposal has been replaced already by [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3678.html N3678 - C++ Stream Guards], which has been replaced by [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3678.html N3665 - Uninterleaved String Output Streaming] and [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3678.html N3750 - C++ Ostream Buffers]]
254
255[table C++ Stream Mutexes Conformance
256    [[Section]  [Description]  [Status] [Comments]]
257    [[X.1]      [Class template stream_mutex]  [Partial] [ Renamed externally_locked_stream<> ]]
258    [[X.2.1]      [constructor]  [Partial] [ externally_locked_stream needs a mutex in addition as argument. ]]
259    [[X.2.2]      [lock]  [yes] [ - ]]
260    [[X.2.3]      [unlock]  [yes] [ - ]]
261    [[X.2.4]      [try_lock]  [yes] [ - ]]
262    [[X.2.5]      [hold]  [Yes] [ - ]]
263    [[X.2.6]      [bypass]  [Yes] [ - ]]
264    [[X.2]      [Class template stream_guard]  [Yes] [ - ]]
265    [[X.2.1]      [stream_guard]  [Yes] [ - ]]
266    [[X.2.2]      [~stream_guard]  [Yes] [ - ]]
267    [[X.2.3]      [bypass]  [Yes] [ - ]]
268    [[X.3]      [Stream Operators]  [Yes] [-]]
269    [[X.4]      [Predefined Objects]  [No] [-]]
270]
271
272
273[endsect]
274
275///////////////////////////////]
276[endsect]
277
278[endsect]
279