Reputation: 2765
Are there C++ programs that are correct and deadlock free when atomic::is_lock_free
returns true, but are undefined or could contain a deadlock when atomic::is_lock_free
returns false?
Given that any lock inside an atomic will be acquired and released under the library's control, I can't imagine how to muck things up, but with multithreading and locks there is usually a way :-)
Upvotes: 12
Views: 1421
Reputation: 2371
In order to have deadlock in a program you need to hold more then one lock simultaneously. Accessing or modifying std::atomic<T>
variable may acquire lock according to the C++11 standard, but it releases the lock as soon as function call finished and it doesn't call any user defined function while holding a lock, so you can't have a situation where two (or more) mutexes are locked simultaneously; hence no deadlock is possible with std::atomic
internal lockable objects.
Upvotes: 5