2012-03-29 37 views
0

マルチコアで共有メモリに同時にアクセスするルールはありますか? 1つのコアが共有メモリに書き込んでいる場合、別のコアが同じメモリを同じ時刻に読み込んでいますが、問題はありますか? この種のシナリオは避けてください。マルチコア:同時に共有メモリにアクセス

答えて

0

これは競合状態と呼ばれ、そのようなコードの結果は予測できません。あなたはそれを避けなければなりません。次のいずれかを実行できます

  • 変更別々のメモリを使用するアルゴリズム、または
  • 同期アトミック操作を使用してアクセス、または
  • は、クリティカルセクションやミューテックスのような、より高いレベルの同期構文を使用してアクセスを同期します。

@DanDanによると、複数のスレッドからの読み取りだけが問題ではありません。

+0

これを避けるには相互排除セマフォを使用してもよろしいですか? E.G .: 1つのコアif(!LOCK)LOCK = TRUE;別のコアif(!LOCK)LOCK = TRUE、LOCKは2つのCORES間で共有されます。 1つのコアがLOCK = TRUEを実行しているときに、別のコアが同時に実行すると(!LOCK)、それはOKですか? – shikun

+0

いいえ、それはブール変数の競合条件です。適切なミューテックスオブジェクトを使用する必要があります(あなたの言語/ OSにどのような意味があるのか​​)。 –

0

はい、これを避ける必要があります。マルチコアとマルチスレッドで安全に行うことができるのは、副作用がない場合に限り、同時に読み取ることだけです。

+0

これを回避するには相互排除セマフォを使用してもよろしいですか? E.G .: 1つのコアif(!LOCK)LOCK = TRUE;別のコアif(!LOCK)LOCK = TRUE、LOCKは2つのCORES間で共有されます。 1つのコアがLOCK = TRUEを実行しているときに、別のコアが同時に実行すると(!LOCK)、それはOKですか? – shikun

+0

ボードにOSがない場合は、コアに同時にアクセスするのを避けるためにIRQを使用しますか?それに関する他のアドバイスは? – shikun

関連する問題