gpt4 book ai didi

c++ - 如何在 C++ 中使用/创建 unique_lock?

转载 作者:IT老高 更新时间:2023-10-28 12:43:09 33 4
gpt4 key购买 nike

请问,谁能解释如何在 C++ 中使用和创建一个 unique_lock ?它既应该用于对监视器的任何过程进行互斥,也应该用于对条件变量执行 wait() ......我从文档中不明白我应该如何创建它。是否需要互斥锁?这是一个伪代码:

/* 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();
}

最佳答案

std::unique_lock 使用 RAII模式。

当你想锁定一个互斥体时,你创建一个 std::unique_lock 类型的局部变量,将互斥体作为参数传递。当 unique_lock 被构造时,它将锁定互斥锁,并且它被破坏它将解锁互斥锁。更重要的是:如果抛出异常,std::unique_lock析构函数将被调用,因此互斥锁将被解锁。

例子:

#include<mutex>
int some_shared_var=0;

int func() {
int a = 3;
{ //Critical section
std::unique_lock<std::mutex> lock(my_mutex);
some_shared_var += a;
} //End of critical section
}

关于c++ - 如何在 C++ 中使用/创建 unique_lock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14709233/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com