如何确保在C ++中解锁储物柜?哪种解决方案更好
how to make sure locker be unlock in c++? which solution is better
有两种解决方案:
一个:
lock()
try{
action()
}catch(...)
{
unlock()
throw;
}
unlock()
乙:
{
LockObject lockObject;
action();
}
LockObject 的构造器将调用 lock(),其 de-construtor 将调用 unlock()。
那么什么是更好的解决方案,或者还有其他更好的解决方案吗?
PS:在Linux C++中,它终于不支持关键字了。所以我必须为这个问题做出决定。
B是一种特殊的编程习语,称为资源获取初始化(RAII),它可以应用于几种编程语言,如C++,D,Ada。
当您想要获取资源时,请使用初始化。并在析构函数中释放资源。
这是一个众所周知的成语,也是C++的好设计。事实上,C++标准库经常使用它。
例如
// global mutex
std::mutex mutex;
void f()
{
// lock mutex
std::lock_guard<std::mutex> lock(mutex);
//do something might throw exception
//...
//do not unlock mutex, it will be unlocked by lock_guard destructor
}
相关文章:
- 我应该在锁定TBitmap画布后解锁它吗
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- c++ 为什么我不应该从不同的线程解锁互斥锁
- 在新作用域中使用unique_lock是否等效于在使用共享资源的工作结束时解锁调用
- "data race"(不是真的)在通知条件变量并解锁关联的互斥锁后
- 程序输入密码并解锁窗口7,8,10
- 在通知之前完成手动解锁
- STD :: Mutex如何在不同的线程中解锁
- v8 多线程储物柜
- 如何使用单个解锁方法(可称为读取器或写入器)实现C++读写器锁?
- 如何在C 中自动汇总日志消息并自动解锁互斥X
- 如果我们已经手动解锁了unique_lock,那么破坏时会解锁吗?
- 正在解锁手动未定义/不良设计的锁定guard
- 从C 运行代码后解锁绑定(在R中)的问题
- 在功能返回之前,可以解锁Mutex会增加并发
- 当互斥锁解锁时,它会notify_all或notify_one
- 如何确保在C ++中解锁储物柜?哪种解决方案更好
- 我应该如何在一个功能中锁定wxMutex,并在另一个功能中将其解锁
- mutex::lock() 检查一次解锁状态是否已经被另一个线程锁定?
- 多线程-一个作家和一个读者-我们需要使用储物柜吗