Per favore, qualcuno può spiegare come usare e creare un unique_lock in C++? Dovrebbe essere usato sia per ottenere l'esclusione reciproca a qualsiasi procedura del monitor e per essere in grado di eseguire l'attesa() sulla variabile di condizione ... Non capisco dalla documentazione come dovrei crearlo. È necessario un mutex? Ecco una pseudo-codice:Come usare/creare unique_lock in C++?
/* compile with g++, flags -std=c++0x -lpthread */
#include <condition_variable>
#include <mutex>
#include <thread>
#include <iostream>
#include <string.h>
#include <unistd.h>
class monitorTh {
private:
std::mutex m;
std::condition_variable waitP;
std::condition_variable waitC;
char element[32];
std::unique_lock::unique_lock l;
public:
void produce(char* elemProd) {
l.lock();
if (/*already_present_element*/) {
waitP.wait(l);
}
else {/*produce element*/}
l.unlock();
}
void consume() {
/*something specular*/
}
};
int main(int argc, char* argv[]) {
monitorTh* monitor = new monitorTh();
char prodotto[32] = "oggetto";
std::thread producer([&]() {
monitor->produce(prodotto);
});
std::thread consumer([&]() {
monitor->consume();
});
producer.join();
consumer.join();
}
-1 _NOT_ sicuro rispetto alle eccezioni. – ildjarn