我有一个特征库的矩阵,比如A
,我想从多个线程中填充它的列,即线程调用A.col(j) = xj
。每列j
将只写一次并且只写一个帖子。因此,没有两个线程可以写入同一列,但可以同时写入两个不同的列。
我在Eigen的文档中找到了一个关于多线程代码的简短段落,在线程环境中使用Eigen之前应该调用Eigen::initParallel()
。但是,它没有在上述场景中声明使用Eigen。
以上述方式使用Eigen是否安全?提前谢谢!
答案 0 :(得分:1)
你描述的方式是安全的,无论是否使用Eigen,因为没有两个线程写入相同的内存位置(即数组中的列)。没有竞争条件,因为没有两个线程访问相同的内存位置,如果你按照你的意愿实现它。如果尝试写入相同的内存位置,则这不是线程安全的。
一个线程甚至可以多次读取或写入其指定的列,而不必担心线程安全,甚至是同一列上的另一行,如果你愿意 - 但只要其他任何东西都不能同时访问该列
我不确定这是不是最佳做法,或者是否更好地使用智能指针。无论哪种方式,您描述的过程都是线程安全的。