Search code examples
c++c++11threadpoolmutexstdthread

What special purpose does unique_lock have over using a mutex?


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?


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.