使用^ {CD1>}库,我编写了一个多线程的C++代码,它由Python调用,并且我使用了^ {CD2>}库。代码失败并抛出SIGSEGV
错误,但是,我没有显式地编写任何共享资源
handle
对象的引用,该对象不执行任何引用计数,因此我想在多个线程上使用它是安全的。我说得对吗下面是一个简单的例子,可以更好地说明问题:
MyClass::MyClass(py::array ar) {
/* perform a reshape of ar */
this->ar = ar;
}
MyClass::MyMethod() {
py::gil_scoped_release release;
/* create threads*/
/* for each thread, compute two views of ar, ar1 and ar2*/
/* compute a double using ar1 and ar2 */
/* use double to update another structure (not py::array)*/
/* join threads*/
py::gil_scoped_acquire acquire;
return
}
最后,请注意,我更新的结构只是从py::buffer_info
对象提取的指针,我会注意更新每个线程中的单独部分
我不知道为什么,但是不,对象的数组家族显然不是线程安全的
当我使用pybind11阵列和openMP时,我总是提取数据指针( 使用data()和mutableData()函数),形状和形状会跨出平行区域,并在平行区域内使用数据指针
相关问题 更多 >
编程相关推荐