#include #include #include void threadSpawn(); boost::try_mutex myMutex; int main() { boost::thread foo(threadSpawn); threadSpawn(); } void threadSpawn() { std::cout << "entering threadSpawn" << std::endl; try { boost::try_mutex::scoped_try_lock lock(myMutex); std::cout << "locked" << std::endl; while(true); } catch(boost::lock_error) { std::cout << "failed to lock" << std::endl; } std::cout << "leaving threadSpawn" << std::endl; } OUTPUT is: entering threadSpawn locked entering threadSpawn locked my EXPECTED OUTPUT would have been: entering threadSpawn locked entering threadSpawn failed to lock leaving threadSpawn Substituting the try_lock with a normal lock yields what I would expect: entering threadSpawn locked entering threadSpawn (end of output, as the lock can't be aquired)