Proszę, czy ktoś może wyjaśnić, jak używać i stworzyć unique_lock w języku C++? Powinny być używane zarówno do wzajemnego wykluczania się do dowolnej procedury monitora, jak i do oczekiwania() na zmienną warunku ... Nie rozumiem z dokumentacji, w jaki sposób mam ją stworzyć. Czy konieczne jest muteks? Tutaj jest pseudo-code:Jak używać/tworzyć unique_lock w języku 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 _NIE_ wyjątku bezpieczne. – ildjarn