各スレッドが異なる仮想メモリ領域で動作している場合、OpenMPまたはPosixスレッドを単独で実行することからmlock()を安全に呼び出すことができますか?システム全体の同期障壁を作成するか、すべてのスレッドを何らかの方法でストールさせますか?mlock()とThreading
重複している場合はお詫び申し上げます。私はGoogleが "mlock openmp"/"mlock thread safety"の検索ですぐに答えを出さなかったのに驚いた。最も近いのはNon-blocking mlock()の2番目の答えで、mlock()は別のスレッドから呼び出すことができ、同期障壁を強制したり必要としないことを示しているようです。
スレッドセーフではない関数のリストに 'mlock()'は表示されません:http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.htmlおそらく安全であるはずです。 – EOF
ありがとう!これは、mlockもスレッド間の暗黙の同期を引き起こさないことを意味しますか? –
いいえ、 'mlock()'は非同期セーフな関数のリストにありませんhttp://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.htmlので、必要に応じてロックを取ることができます。このようなロックはリーフレベルのロックとなるため、デッドロックに参加できないため、スレッドセーフではありません。 – EOF