c++ - boost 互斥量和类成员访问

标签 c++ multithreading boost mutex private-members

我在尝试使用 BOOST threads 1.53.0 时遇到了问题.由于我是 BOOST 的新手,我现在遇到一个问题,即项目中的大型类需要进行一些线程模式处理。

在编译代码时,我不断收到错误:

error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex'

通过网上的阅读我发现使用Boost的lock_guard,结果如下所示

PointPorcessor processor = PointProcessor(x,y,z);

正在创建类的实例并将其分配给 processor 变量。 (或者我错了吗?)。这基本上意味着 boost 现在将允许复制互斥体

类本身

PointProcessor
{
boost::mutex mtex; // The one and only mutex
// Other members
};

我可以使用指针来代替 PointProcessor* 处理器 = new PointProcessor(x,y,z) 问题是,这是一个大型代码库,我不想将其余实现更改为 PointProcessor* processor = new PointProcessor,因为它们只是 PointProcessor processor = PointProcessor(x, y,z)

最佳答案

问题在于:

PointPorcessor processor = PointProcessor(x, y, z);

您正在通过复制初始化创建processor,其中类型PointProcessor 的临时值首先被默认构造,然后是 processor 是从该临时文件复制构造或移动构造的。

但是,boost::mutex 是不可复制和不可移动的(前提是您使用的 Boost 版本完全支持移动语义),这解释了为什么复制初始化 processor 是非法的。

您应该通过直接初始化构造您的对象,这样:

PointProcessor processor(x, y, z);

关于c++ - boost 互斥量和类成员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16263144/

相关文章:

Python:无法从外部进程设置进程变量

c++ - 如何解码 boost 库命名?

c++ - Valgrind 错误 : Syscall param epoll_pwait(sigmask) points to unaddressable byte(s)

c++ - 排除 OpenGL 中两个圆的重叠区域中的点

java - 线程优先级

java - 动态优化线程数

c++ - 使用 boost 示例时出现错误 C4996

c++ - 最简单的实现模式 1 writer - 多个 readers with boost library

c++ - C++ 名称解析(和重载)规则列表

c++ - SSE:将__m128和__m128i转换为两个__m128d