首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VS 2017计划无法识别"scoped_lock“

VS 2017计划无法识别"scoped_lock“
EN

Stack Overflow用户
提问于 2018-04-17 23:31:29
回答 1查看 1.5K关注 0票数 2

我在VS 2017中使用scoped_locked时遇到了一些问题。我相信我将它们追溯到了<mutex>声明,如下所示。开始使用scoped_lock时禁用#if开关的最安全方法是什么?再次感谢。

代码语言:javascript
复制
#if _HAS_CXX17
// CLASS TEMPLATE scoped_lock
template<class... _Mutexes>
class scoped_lock
{   // class with destructor that unlocks mutexes
public:
    explicit scoped_lock(_Mutexes&... _Mtxes)
    : _MyMutexes(_Mtxes...)
    {   // construct and lock
    _STD lock(_Mtxes...);
    }

    explicit scoped_lock(adopt_lock_t, _Mutexes&... _Mtxes)
    : _MyMutexes(_Mtxes...)
    {   // construct but don't lock
    }

    ~scoped_lock() _NOEXCEPT
    {   // unlock all
    _For_each_tuple_element(
        _MyMutexes,
        [](auto& _Mutex) _NOEXCEPT { _Mutex.unlock(); });
    }

    scoped_lock(const scoped_lock&) = delete;
    scoped_lock& operator=(const scoped_lock&) = delete;
private:
    tuple<_Mutexes&...> _MyMutexes;
};
EN

回答 1

Stack Overflow用户

发布于 2018-04-17 23:46:22

从您的问题看,您不清楚是否要禁用/启用此行为。但一般来说,这可以通过/std:c++latest编译器参数和/或覆盖_HAS_CXX17来控制,如Visual C++ Team Blog中所述。问题是如果没有ovverides,_HAS_CXX17的定义取决于yvals.h中的编译器版本(参见this问题),因此这可能会因Visual Studio的版本而异(所以我不能给你一个直接的答案,什么组合将给你所需的结果,因为它不清楚你是否想要禁用/启用它,以及你的Visual Studio的确切版本)。正如文章中提到的,这有一个缺点,那就是您可能会失去其他特性,因为它们没有提供对STL的细粒度控制。但是您可以尝试看看恢复到旧的STL行为是否会给您带来问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49882137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档