Next: , Previous: , Up: Pthreads   [Contents][Index]


6.27.1.4 Hardware operations for multi-tasking

アトミックなハードウェア操作は、 他のタスクが中間状態を参照することなく、 操作全体を実行します。 これらの操作は、 遅い OS プリミティブを使用せずにタスクを同期するために使用できますが、 非アトミックな操作シーケンスと比較すると遅くなる傾向があります。 アトミックな操作は、 アライメントを必要としないハードウェアであっても、 アライメントされたアドレスでのみ正しく機能します。

!@ ( u1 a-addr – u2 ) gforth-experimental “store-fetch”

a_addr から 値を u2 に取得し、 そして、 a_addr に 値 u1 を格納する操作を、 アトミック操作として行います。

+!@ ( u1 a-addr – u2 ) gforth-experimental “add-store-fetch”

a_addr から 値 u2 を取得し、 a_addr の値に u1 を足し込む操作を、 アトミック操作として行います。

?!@ ( unew uold a-addr – uprev ) gforth-experimental “question-store-fetch”

a_addr から値 uprev を取得し、それを uold と比較し、 等しい場合は unewa_addr に格納する操作を、 アトミック操作として行います。

もう 1 つのハードウェア操作はメモリ・バリアです(memory barrier)。 残念ながら、 最新のハードウェアでは、 メモリ操作を他のメモリ操作と比較して(別のコアから見た場合に)並べ替えることができることが多く、 メモリ・バリアにより、 タスク実行のある時点でこの並べ替えを抑制します。

barrier ( ) gforth-experimental “barrier”

バリア前のすべてのメモリ操作は、 バリア後のメモリ操作より前に実行されます。