作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!