C++ 特征库:同时写入多列是否安全?

C++ 特征库:同时写入多列是否安全?,c++,multithreading,eigen,C++,Multithreading,Eigen,我有一个矩阵,比如Eigen库的a,我想从多个线程填充它的列,即线程调用a.col(j)=xj。每个列j将只被一个线程写入一次。因此,没有两个线程写入同一列,但可以同时写入两个不同的列 我在Eigen的文档中发现了一段关于多线程代码的短文,其中说在线程环境中使用Eigen之前应该调用Eigen::initParallel()。然而,它并没有声明在上述场景中使用Eigen 按上述方式使用本征安全吗?提前谢谢你 无论是否使用Eigen,您所描述的方法都是安全的,因为没有两个线程写入相同的内存位置(即

我有一个矩阵,比如Eigen库的
a
,我想从多个线程填充它的列,即线程调用
a.col(j)=xj
。每个列
j
将只被一个线程写入一次。因此,没有两个线程写入同一列,但可以同时写入两个不同的列

我在Eigen的文档中发现了一段关于多线程代码的短文,其中说在线程环境中使用Eigen之前应该调用
Eigen::initParallel()
。然而,它并没有声明在上述场景中使用Eigen


按上述方式使用本征安全吗?提前谢谢你

无论是否使用Eigen,您所描述的方法都是安全的,因为没有两个线程写入相同的内存位置(即数组中的列)。不存在争用条件,因为如果按照您所说的方式实现,则没有两个线程访问相同的内存位置。如果试图写入同一内存位置,则这将不是线程安全的

一个线程甚至可以多次读取或写入其指定的列而不必担心线程安全,如果您愿意的话,甚至可以读取或写入同一列上的另一行,但前提是没有其他线程同时访问该列

我不确定这是否是最佳实践,或者使用智能指针是否更好。无论哪种方式,您描述的过程都是线程安全的