]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 | ||
249 | While 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] |