From: Howard Hinnant (hinnant_at_[hidden])
Date: 2007-03-19 18:48:11
On Mar 19, 2007, at 5:29 PM, Sohail Somani wrote:
> I was pretty much hoping for boost threads + cancellation.
Fwiw, this is the approach of N2184:
The very biggest change between boost::thread and N2184 is the
addition of cancellation. And, imho, this is a huge change.
There are several more minor changes:
* The N2184::thread is non-copyable like boost::thread, but movable
(taking advantage of new C++ language and std::lib features). Movable
N2184::thread maintains the one-to-one mapping between the std::thread
and the OS thread which boost has (sole ownership semantics). It just
adds the ability to move the thread between scopes (such as return
from factory functions). I recently drew the analogy this way:
boost::thread is like a scoped_ptr to the OS thread.
N2184::thread is like an auto_ptr to the OS thread (the proposed
unique_ptr would be a more accurate analogy).
* N2184::thread separates out the concept of thread identity and
thread handle. In boost these are both just boost::thread. The
thread::id is copyable. The only thing you can do with it is equality
* N2184::thread moves some of the static boost thread members (yield,
sleep) to a namespace called this_thread. So the syntax for calling
them is std::this_thread::yield() as opposed to boost::thread::yield().
* N2184::threads adds a "back door escape hatch" to the OS thread
called native_handle(). You can get that from the std::thread and do
non-portable things with it at the OS level (setting thread priority
is the poster child).
N2184 does not mention the rest of boost::threads (mutex, locks,
condition, thread_once, TLS, etc.). All of that stuff is pretty much
assumed modulo details - TLS will be in the language, not the lib.
N2184 just concentrates on the thread class (which has been much more
Boost list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk