使用 std::shared_ptr 来管理 std::mutex 生命周期和锁定/解锁 - 这是一个好的做法吗?

问题描述 投票:0回答:0

我编写了一个 Lock 类,它使用

std::shared_ptr
来处理
std::mutex
对象的生命周期,包括锁定/解锁操作。我知道
std::lock_guard
std::unique_lock
更常用于后者。此外,这里的 std::mutex 不是动态分配的,这不是
std::shared_ptr
使用的常见情况。这些担忧是否合理?这些做法是否可以接受或存在潜在问题? 谢谢你。

#include <mutex>
std::mutex mtx;
struct Lock
{
    Lock(std::mutex* pmtx) :
        psmtx(pmtx, [this](std::mutex* pmtx_) {(*this)(pmtx_); })

    {
        std::cout << "Lock()\n";

    }
    void operator()(std::mutex* pMtx)
    {
        std::cout << "~Lock()\n";
        pMtx->unlock();
    }
    std::shared_ptr<std::mutex> psmtx;
};

int main()
{

    LockShared lockA(&mtx);
    LockShared lockB(lockA);
    LockShared lockC(lockB);

}
c++ locking mutex shared-ptr
© www.soinside.com 2019 - 2024. All rights reserved.