From 2d7e2f0aaef20ab65b7f70e306c00daeea9e830c Mon Sep 17 00:00:00 2001 From: John Maddock Date: Sun, 16 Mar 2008 09:48:43 +0000 Subject: [PATCH] Added Boost.Thread news. [SVN r43648] --- feed/history.rss | 92 ++++++++++++++++++++++++++++++++++- feed/history/boost_1_35_0.qbk | 42 +++++++++++++++- feed/news.rss | 92 ++++++++++++++++++++++++++++++++++- 3 files changed, 223 insertions(+), 3 deletions(-) diff --git a/feed/history.rss b/feed/history.rss index 52fb2dfe..016979bd 100644 --- a/feed/history.rss +++ b/feed/history.rss @@ -14,7 +14,7 @@ <h3><span class="link">New Libraries</span></h3> <ul> <li> - <span class="library"><a href="/libs/asio/index.html">ASIO</a>:</span> Portable networking, + <span class="library"><a href="/libs/asio/index.html">Asio</a>:</span> Portable networking, including sockets, timers, hostname resolution and socket iostreams, from Chris Kohlhoff. </li> @@ -99,6 +99,79 @@ </li> </ul> </li> + <li> + <span class="library"><a href="/libs/thread/index.html">Thread</a>:</span> + <ul> + <li> + Instances of boost::thread and of the various lock types are now movable. + </li> + <li> + Threads can be interrupted at interruption points. + </li> + <li> + Condition variables can now be used with any type that implements the + Lockable concept, through the use of <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span></code> + (<code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition</span></code> is a typedef to <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span></code>, provided for + backwards compatibility). <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span></code> + is provided as an optimization, and will only work with <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">></span></code> + (<code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>). + </li> + <li> + Thread IDs are separated from boost::thread, so a thread can obtain it's + own ID (using <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>), + and IDs can be used as keys in associative containers, as they have the + full set of comparison operators. + </li> + <li> + Timeouts are now implemented using the Boost DateTime library, through + a typedef <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span></code> for absolute timeouts, + and with support for relative timeouts in many cases. <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">xtime</span></code> + is supported for backwards compatibility only. + </li> + <li> + Locks are implemented as publicly accessible templates <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span></code>, <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span></code>, + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_lock</span></code>, and <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">upgrade_lock</span></code>, + which are templated on the type of the mutex. The Lockable concept has + been extended to include publicly available <code><span class="identifier">lock</span><span class="special">()</span></code> and <code><span class="identifier">unlock</span><span class="special">()</span></code> member functions, which are used by + the lock types. + </li> + <li> + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_mutex</span></code> has been removed, and the + functionality subsumed into <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span></code>. + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_mutex</span></code> is left as a typedef, but + is no longer a separate class. + </li> + <li> + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_try_mutex</span></code> has been removed, + and the functionality subsumed into <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span></code>. + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_try_mutex</span></code> is left as a typedef, + but is no longer a separate class. + </li> + <li> + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">lock_ops</span></code> has been removed. Code that + relies on the <code><span class="identifier">lock_ops</span></code> + implementation detail will no longer work, as this has been removed, + as it is no longer necessary now that mutex types now have public <code><span class="identifier">lock</span><span class="special">()</span></code> + and <code><span class="identifier">unlock</span><span class="special">()</span></code> + member functions. + </li> + <li> + <code><span class="identifier">scoped_lock</span></code> constructors + with a second parameter of type bool are no longer provided. With previous + boost releases, <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span> + <span class="identifier">some_lock</span><span class="special">(</span><span class="identifier">some_mutex</span><span class="special">,</span><span class="keyword">false</span><span class="special">);</span></code> + could be used to create a lock object that was associated with a mutex, + but did not lock it on construction. This facility has now been replaced + with the constructor that takes a <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">defer_lock_type</span></code> + as the second parameter: <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span> + <span class="identifier">some_lock</span><span class="special">(</span><span class="identifier">some_mutex</span><span class="special">,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">defer_lock</span><span class="special">);</span></code> + </li> + <li> + The broken <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">read_write_mutex</span></code> has been replaced + with <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_mutex</span></code>. + </li> + </ul> + </li> <li> <span class="library"><a href="/libs/wave/index.html">Wave</a>:</span> Standards conformant implementation of the mandated C99/C++ preprocessor functionality packed @@ -159,6 +232,23 @@ </li> </ul> </li> + <li> + <span class="library"><a href="/libs/functional/hash/index.html">Hash</a>:</span> + A TR1 hash + function object, from Daniel James. Highlights: + <ul> + <li> + Support for <code><span class="keyword">long</span> <span class="keyword">long</span></code>, + <code><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span></code>. + </li> + <li> + Improved the algorithm for hashing floating point numbers. + </li> + <li> + A few bug and warning fixes. + </li> + </ul> + </li> </ul> </div> <div id="version_1_35_0.supported_compilers"> diff --git a/feed/history/boost_1_35_0.qbk b/feed/history/boost_1_35_0.qbk index 7cb2ccc6..3638d1f2 100644 --- a/feed/history/boost_1_35_0.qbk +++ b/feed/history/boost_1_35_0.qbk @@ -12,7 +12,7 @@ [section New Libraries] -* [phrase library..[@/libs/asio/index.html ASIO]:] Portable networking, +* [phrase library..[@/libs/asio/index.html Asio]:] Portable networking, including sockets, timers, hostname resolution and socket iostreams, from Chris Kohlhoff. * [phrase library..[@/libs/bimap/index.html Bimap]:] Boost.Bimap is a @@ -59,6 +59,46 @@ some existing code. See [@/libs/iostreams/doc/index.html?path=12 Release Notes] for details. * Numerous other bug fixes and optimizations. +* [phrase library..[@/libs/thread/index.html Thread]:] + * Instances of boost::thread and of the various lock types are now movable. + * Threads can be interrupted at interruption points. + * Condition variables can now be used with any type that implements the + Lockable concept, through the use of `boost::condition_variable_any` + (`boost::condition` is a typedef to `boost::condition_variable_any`, provided for + backwards compatibility). `boost::condition_variable` is provided as an + optimization, and will only work with `boost::unique_lock` + (`boost::mutex::scoped_lock`). + * Thread IDs are separated from boost::thread, so a thread can obtain it's + own ID (using `boost::this_thread::get_id()`), and IDs can be used as keys in + associative containers, as they have the full set of comparison operators. + * Timeouts are now implemented using the Boost DateTime library, through a + typedef `boost::system_time` for absolute timeouts, and with support for relative + timeouts in many cases. `boost::xtime` is supported for backwards compatibility + only. + * Locks are implemented as publicly accessible templates `boost::lock_guard`, + `boost::unique_lock`, `boost::shared_lock`, and `boost::upgrade_lock`, which are + templated on the type of the mutex. The Lockable concept has been extended to + include publicly available `lock()` and `unlock()` member functions, which are used + by the lock types. + * `boost::try_mutex` has been removed, and the functionality subsumed into + `boost::mutex`. `boost::try_mutex` is left as a typedef, but is no longer a separate + class. + * `boost::recursive_try_mutex` has been removed, and the functionality + subsumed into `boost::recursive_mutex`. `boost::recursive_try_mutex` is left as a + typedef, but is no longer a separate class. + * `boost::detail::thread::lock_ops` has been removed. Code that relies on the + `lock_ops` implementation detail will no longer work, as this has been removed, as + it is no longer necessary now that mutex types now have public `lock()` and + `unlock()` member functions. + * `scoped_lock` constructors with a second parameter of type bool are no + longer provided. With previous boost releases, + `boost::mutex::scoped_lock some_lock(some_mutex,false);` + could be used to create a lock object that was associated with a mutex, + but did not lock it on construction. This facility has now been replaced with + the constructor that takes a `boost::defer_lock_type` as the second parameter: + `boost::mutex::scoped_lock some_lock(some_mutex,boost::defer_lock);` + * The broken `boost::read_write_mutex` has been replaced with + `boost::shared_mutex`. * [phrase library..[@/libs/wave/index.html Wave]:] Standards conformant implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser. Highlights: diff --git a/feed/news.rss b/feed/news.rss index 65aee129..368ca0ca 100644 --- a/feed/news.rss +++ b/feed/news.rss @@ -14,7 +14,7 @@ <h3><span class="link">New Libraries</span></h3> <ul> <li> - <span class="library"><a href="/libs/asio/index.html">ASIO</a>:</span> Portable networking, + <span class="library"><a href="/libs/asio/index.html">Asio</a>:</span> Portable networking, including sockets, timers, hostname resolution and socket iostreams, from Chris Kohlhoff. </li> @@ -99,6 +99,79 @@ </li> </ul> </li> + <li> + <span class="library"><a href="/libs/thread/index.html">Thread</a>:</span> + <ul> + <li> + Instances of boost::thread and of the various lock types are now movable. + </li> + <li> + Threads can be interrupted at interruption points. + </li> + <li> + Condition variables can now be used with any type that implements the + Lockable concept, through the use of <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span></code> + (<code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition</span></code> is a typedef to <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span></code>, provided for + backwards compatibility). <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span></code> + is provided as an optimization, and will only work with <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special"><</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">></span></code> + (<code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>). + </li> + <li> + Thread IDs are separated from boost::thread, so a thread can obtain it's + own ID (using <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>), + and IDs can be used as keys in associative containers, as they have the + full set of comparison operators. + </li> + <li> + Timeouts are now implemented using the Boost DateTime library, through + a typedef <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">system_time</span></code> for absolute timeouts, + and with support for relative timeouts in many cases. <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">xtime</span></code> + is supported for backwards compatibility only. + </li> + <li> + Locks are implemented as publicly accessible templates <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">lock_guard</span></code>, <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span></code>, + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_lock</span></code>, and <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">upgrade_lock</span></code>, + which are templated on the type of the mutex. The Lockable concept has + been extended to include publicly available <code><span class="identifier">lock</span><span class="special">()</span></code> and <code><span class="identifier">unlock</span><span class="special">()</span></code> member functions, which are used by + the lock types. + </li> + <li> + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_mutex</span></code> has been removed, and the + functionality subsumed into <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span></code>. + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">try_mutex</span></code> is left as a typedef, but + is no longer a separate class. + </li> + <li> + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_try_mutex</span></code> has been removed, + and the functionality subsumed into <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span></code>. + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_try_mutex</span></code> is left as a typedef, + but is no longer a separate class. + </li> + <li> + <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">lock_ops</span></code> has been removed. Code that + relies on the <code><span class="identifier">lock_ops</span></code> + implementation detail will no longer work, as this has been removed, + as it is no longer necessary now that mutex types now have public <code><span class="identifier">lock</span><span class="special">()</span></code> + and <code><span class="identifier">unlock</span><span class="special">()</span></code> + member functions. + </li> + <li> + <code><span class="identifier">scoped_lock</span></code> constructors + with a second parameter of type bool are no longer provided. With previous + boost releases, <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span> + <span class="identifier">some_lock</span><span class="special">(</span><span class="identifier">some_mutex</span><span class="special">,</span><span class="keyword">false</span><span class="special">);</span></code> + could be used to create a lock object that was associated with a mutex, + but did not lock it on construction. This facility has now been replaced + with the constructor that takes a <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">defer_lock_type</span></code> + as the second parameter: <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span> + <span class="identifier">some_lock</span><span class="special">(</span><span class="identifier">some_mutex</span><span class="special">,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">defer_lock</span><span class="special">);</span></code> + </li> + <li> + The broken <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">read_write_mutex</span></code> has been replaced + with <code><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_mutex</span></code>. + </li> + </ul> + </li> <li> <span class="library"><a href="/libs/wave/index.html">Wave</a>:</span> Standards conformant implementation of the mandated C99/C++ preprocessor functionality packed @@ -159,6 +232,23 @@ </li> </ul> </li> + <li> + <span class="library"><a href="/libs/functional/hash/index.html">Hash</a>:</span> + A TR1 hash + function object, from Daniel James. Highlights: + <ul> + <li> + Support for <code><span class="keyword">long</span> <span class="keyword">long</span></code>, + <code><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span></code>. + </li> + <li> + Improved the algorithm for hashing floating point numbers. + </li> + <li> + A few bug and warning fixes. + </li> + </ul> + </li> </ul> </div> <div id="version_1_35_0.supported_compilers">