What special purpose does unique_lock have over using a mutex?

c++, c++11, mutex, stdthread, threadpool

Solution

[Do] these snippets of code accomplish the same thing?

No.

The first one will release the lock at the end of the block, no matter what the block is. The second will not release the lock at the end if the critical section is exited with a `break`, `continue`, `return`, `goto`, exception, or any other kind of non-local jump that I'm forgetting about.

Problem

I'm not quite sure why `std::unique_lock<std::mutex>` is useful over just using a normal lock. An example in the code I'm looking at is: ``` {//aquire lock std::unique_lock<std::mutex> lock(queue_mutex); //add task tasks.push_back(std::function<void()>(f)); }//release lock ``` why would this preferred over ``` queue_mutex.lock(); //add task //... queue_mutex.unlock(); ``` do these snippets of code accomplish the same thing?

Original source