c++ - 封装boost thread_group。关于ids和同步的问题

标签 c++ multithreading boost threadgroup

我正在使用一个封装了 thread_group 的类,对此有一些疑问

class MyGroup{

private:
     boost::this_thread::id _id;
     boost::thread::thread_group group;
     int abc;
     //other attributes
public:

     void foo();


};

在类构造函数中,我启动了 N 个线程

for (size_t i=0;i<N;i++){
      group.add(new boost::thread(boost::bind(&foo,this)));
}


void foo(){

   _id = boost::this_thread::get_id();
   //more code.
   abc++ //needs to be sync?
}

所以,这是我的问题。

类属性是否需要同步?

是否每个线程都有不同的 ID?例如,如果我有

void bar(){
  this->id_;
}

这会导致每个线程的 ID 不同,还是每个线程都相同?

提前致谢!

最佳答案

是的,即使您使用线程创建助手作为插入力,共享数据访问也必须受到保护。

最终它们都会同时执行相同的代码,库无法对您拥有和管理的变量进行保护。

如果 this->_id 打印当前线程 ID 那么是的,它会在不同的线程访问它时打印不同的值。

关于c++ - 封装boost thread_group。关于ids和同步的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1472330/

相关文章:

c++ - 在 OpenCV C++ 接口(interface)中更改 Mat 类实例的数据类型

c++ - Win32 控制台代码在哪里运行?从多个线程使用时控制台挂起

c++11 线程、SFML 和 code::blocks

ASP.NET 异步缓存

c++ - 获取具有相同扩展名的文件列表并处理它们

python - 使用 Boost-Python 包装枚举

c++ - 如何将自定义时间 "ticks"转换为 TDateTime?

c++ - Boost Geometry最近的查询是否总是先按最小距离对结果进行排序?

c++ - 为什么这个类不隐式转换为指针?

c++ - Boost::spirit(经典)基元与自定义解析器