
On May 28, 2008, at 6:42 AM, Johan Torp wrote:
I also expect re-use will mean users have to re-implement "unique_thread_id" and some really difficult-to-fix bugs for people who do not think about it. OTOH, I see some value in that std::thread::id are the same as window's thread ids when you're debugging and post-mortem debugging.
std::thread::id has one bit of functionality that may reduce the need for "unique_thread_id": It has a notion of an id that is guaranteed to be "not any thread". For example: std::thread::id id1; std::thread::id id2 = std::this_thread::get_id(); assert(id1 != id2); The assert is guaranteed to pass. So when you know that a thread is terminating, or is otherwise no longer valid, one can reset thread id's to not-a-thread: id2 = std::thread::id(); I've used this (for example) in implementing recursive mutexes: class recursive_mutex { unsigned state_; std::thread::id id_; ... public: recursive_mutex() : id_() ... // id_ guaranteed not to compare equal to any call to get_id() ... void unlock() { ... if (decrease_lock_count() == 0) id_ = std::thread::id(); // id_ guaranteed not to compare equal to any call to get_id() ... } ... }; -Howard