我编写了一个 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);
}