c++ - 寻找一个函数(或宏)来返回一个 boost::scoped_lock

标签 c++ function boost shortcut scoped-lock

我正在寻找代码缩短的想法。我正在使用 boost::scoped_lock 来锁定 boost::mutex 但我想缩短我正在编写的代码量。

目前我在我的类中定义了一个mutex 和一个名为_sync 的成员字段。当我想锁定时,我必须写:

scoped_lock<mutex> lock(_sync);

棘手的部分是这是一个作用域锁,所以我假设如果我编写一个静态函数来返回 scoped_lock,那么它会在它离开静态函数的函数作用域后立即解锁:

static scoped_lock<mutex> lock(mutex& sync)
{
    return scoped_lock<mutex>(sync);
}

这种方法将使输入变得非常容易:

public void Object::modify()
{
    lock(_sync); // <-- nice and short! ;)

    // do something to modify the object
    //..
    // the mutex is unlocked when we leave the scope of modify
}

我的假设是否正确?当我的静态函数返回时,scoped_lock 会立即解锁吗?

最佳答案

不要...

当您键入 scoped_lock<mutex> lock(_sync) 时,阅读您的代码的每个人都知道发生了什么,如果您在两年后查看您的代码,您也会知道。懒惰通常是创建实现的不良动机。除非你想强制使用,有不止几百个地方需要写这个表达式,就别写了

在您写下问题所花费的时间,以及您思考如何做的时间以及我们所有人回答您问题所花费的时间,您可能已经写下了所有 scoped_lock<mutex> lock(_sync)你需要的。尤其是当您使用 IDE 完成支持时。

关于c++ - 寻找一个函数(或宏)来返回一个 boost::scoped_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768927/

相关文章:

c++ - 有一个指向项目实例的共享指针列表被转换为基类什么是将项目分类到单独列表中的转换选项?

c++ - 如何减少基于 MingW 的 GUI 应用程序的内存消耗?

在函数内部声明的 C 自由变量

javascript函数参数位置

javascript - 在 JS 中将参数作为单独的参数传递

c++ - 使用 boost 线程和循环缓冲区挂起的生产者/消费者

c++ - 'sqlite3_api' 未在此范围内声明

c++ - 对的无序 multimap

c++ - 什么算作 "write"到 std::map ?

c++ - 使用 boost-python 将参数从 Python 脚本传递到 C++