gpt4 book ai didi

c++ - 如何最好地编写使用相同互斥锁的多个函数

转载 作者:行者123 更新时间:2023-11-30 00:52:08 26 4
gpt4 key购买 nike

假设我有一些代码如下所示:

g_mutex

void foo()
{
g_mutex.lock();
...
g_mutex.unlock()
}

void foobar()
{
g_mutex.lock();
...
g_mutex.unlock()

foo();

g_mutex.lock();
...
g_mutex.unlock()
}

有没有一种模式可以让我在 foobar() 中只锁定互斥锁一次?

最佳答案

我可以想到两种解决方案:

1。使用 std::recursive_mutex

这样,如果同一个线程不止一次锁定互斥锁,就没有问题,您不必在调用函数之前解锁它。

不过,请使用 lock_guardunique_lock,不要在代码中乱放锁定/解锁对。

2。让 foo() 以守卫为参数

像这样重写foo():

void foo(lock_guard<mutex>&)
{
// do foo stuff
}

这样就不可能在没有锁定互斥体的情况下调用foo()lock_guard 对象是一个 token ,表示 foo() 只能通过同步调用。当然,仍然有可能通过锁定一个不相关的互斥锁来搞砸它(如果你正在实现一个类的方法,这种情况很少见,只有一个可见的互斥锁被锁定)。

您可以在 this Andrei's pre-C++-11 article 上查看此方法的更多详细信息.

关于c++ - 如何最好地编写使用相同互斥锁的多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781089/

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