2017-11-28 3 views
1

私はEigenライブラリの行列、たとえばAを持っていて、複数のスレッドからその列を埋めたい、つまりスレッドはA.col(j) = xjを呼び出します。各列jは、正確に1回、1つのスレッドでのみ書き込まれます。したがって、2つのスレッドが同じ列に書き込むことはありませんが、2つの異なる列を同時に書き込むことはできません。固有ライブラリ:複数の列への書き込みは同時に安全ですか?

スレッド環境でEigenを使用する前に、Eigen::initParallel()が呼び出されるべきであるというマルチスレッドコードに関するEigenのドキュメントの短い段落が見つかりました。ただし、上記のようにシナリオでEigenを使用することについての記述はありません。

上記の方法でEigenを安全に使用できますか?前もって感謝します!

+1

[関連](https://stackoverflow.com/questions/42304510/thread-safe-writing-to-eigenmatrixxd-byrow/42326595#42326595) –

答えて

1

2つのスレッドが同じメモリ位置(つまり、配列の列)に書き込むことはないため、Eigenを使用するかどうかにかかわらず安全です。競合条件はありません。あなたが言うようにそれを実装するならば、同じメモリロケーション。同じメモリ位置に書き込もうとすると、スレッドセーフではありません。

スレッドの安全性や同じ列の別の行を心配することなく、割り当てられた列に対して何度も読み書きを行うこともできますが、他の何もその列にアクセスしていない限り時間。

スマートポインタを使用する方が良いかどうか、それがベストプラクティスであるかどうかわかりません。いずれにしても、記述するプロセスはスレッドセーフです。

関連する問題