In quali situazioni si utilizzerà il metodo release
di std::unique_lock
? Ho commesso l'errore di utilizzare il metodo release
invece del metodo unlock
e ho impiegato un po 'di tempo per capire perché il codice seguente non funzionava.quali sono i casi d'uso per std :: unique_lock :: release?
#include <mutex>
#include <iostream>
#include <vector>
#include <thread>
#include <chrono>
std::mutex mtx;
void foo()
{
std::unique_lock<std::mutex> lock(mtx);
std::cout << "in critical section\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
lock.release();
}
int main()
{
std::vector<std::thread> threads;
for (int i = 0; i < 5; ++i)
threads.push_back(std::thread(foo));
for (std::thread& t : threads)
t.join();
}
A parte: in questo caso si desidera un 'lock_guard', non un' unique_lock'. –