c++ - Eigen 库 : Is writing to multiple columns concurrently safe?

标签 c++ multithreading eigen

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

我在 Eigen 的文档中发现了一段关于多线程代码的简短段落,说 Eigen::initParallel() 应该在线程环境中使用 Eigen 之前被调用。但是,它没有对在上述场景中使用 Eigen 做出声明。

按上述方式使用 Eigen 是否安全?提前致谢!

最佳答案

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

如果您愿意,一个线程甚至可以多次读取或写入其分配的列而不用担心线程安全,甚至可以在同一列上读取或写入另一行——但前提是没有其他任何东西同时访问该列.

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

关于c++ - Eigen 库 : Is writing to multiple columns concurrently safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47542824/

相关文章:

c++ - 为什么 WaitForDeath() 可以杀死示例中的线程?

c++ - 如何通过平移、旋转和缩放反转仿射变换?

c++ - 当模态对话框处于事件状态时检测主应用程序窗口上的 WM_CLOSE 事件?

c++ - Visual C++ 项目引用的新手帮助

java - 如何将ObjectDecoder添加到netty服务器

c++ - 如何在 Eigen 中对矩阵进行逐行裁剪?

c++ - 如何在列中打印特征变量?

c++ - 您如何为标准库容器定义 C++ 概念?

c++ - 为什么表达式的结果取决于表达式的放置位置?

python线程和性能?