gpt4 book ai didi

c++ - 通过继承而非组合锁定

转载 作者:太空狗 更新时间:2023-10-29 19:54:51 26 4
gpt4 key购买 nike

在我编写或审查的大多数代码中,锁定是通过组合实现的,其中一个类拥有一个临界区或互斥量:

class MyClass
{
Mutex mMutex;
};

当可以通过多个线程访问可变成员时,我们通过 RAII 获取和释放锁,如下所示:

void MyClass::Method()
{
Lock lock(mMutex);
// ...
}

今天我查看了一些代码,其中代码通过继承实现锁定,如下所示:

class MyClass : public Mutex
{
// ...
};

并且锁定是由锁定“自身”的类执行的:

void MyClass::Method()
{
Lock lock(this);
// ...
}

这种方法有什么优点或缺点吗?或者这只是一个风格问题?

最佳答案

这几乎没有意义。 MyClass 是某种扩展了 Mutex 的同步对象吗?如果不是,那么继承几乎肯定是错误的选择,因为将 MyClass 用作 Mutex 没有意义(MyClass 的关系Mutex 不是“is-a”关系)。

这也很危险:

MyClass x;
Lock lock(x);
x.Method(); // uh oh.

关于c++ - 通过继承而非组合锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4425039/

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