小编Ato*_*r94的帖子

为什么不能从派生类锁定基类互斥体?

我有一个带有成员变量的基类B()pthread_mutex_t m。当我尝试锁定派生类中的互斥锁时,我将永远被阻止。我打开GDB并打印出m看起来像乱码(未实例化)的图片,但是我不确定。

基类

class B
{
    protected: //or public!
        pthread_mutex_t m;

    public:
        virtual void lock(); //wrapper for pthread_mutex_lock(&m)
        virtual void unlock(); //wrapper
};
Run Code Online (Sandbox Code Playgroud)

派生类

class D : B
{
    public:
        void foo();

    private:
        pthread_mutex_t derived_m;
};
Run Code Online (Sandbox Code Playgroud)

这是我无限期阻止的代码。

D::foo() {
    //for reference below, gdb prints were taken here.

    pthread_mutex_lock(&m); //blocks forever
    pthread_mutex_lock(&derived_m); //okay
    lock(); //blocks forever
}
Run Code Online (Sandbox Code Playgroud)

用于&m的GDB print()

$1 = {__data = {__lock = -8656, __count = 32767, __owner = 4198302, 
    __nusers = 0, __kind = …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance mutex

1
推荐指数
1
解决办法
567
查看次数

标签 统计

c++ ×1

inheritance ×1

mutex ×1