目的
移植性が最大の関心事である小さなライブラリを書いています。これは、ほとんど準拠したC90(ISO / IEC 9899:1990)環境のみを想定するように設計されています...それ以上のものはありません。ライブラリによって提供される一連の関数はすべて、内部データ構造で動作(読み取り/書き込み)します。私は他のいくつかの設計の代替案を検討しましたが、ライブラリが達成しようとしていることに対して他に実行可能なものはないようです。
質問
スレッドセーフを確保するために使用できるポータブルなアルゴリズム、テクニック、または呪文はありますか?関数を再入可能にすることには関心がありません。さらに、アルゴリズム/テクニック/呪文が移植可能である場合、私は速度や(おそらく)リソースの浪費については心配していません。理想的には、ライブラリ(GNU Pthなど)やシステム固有の操作(アトミックテストアンドセットなど)に依存したくありません。
Lamportのパン屋のアルゴリズムを変更することを検討しましたが、スレッド自体で機能するのではなく、スレッドによって呼び出される関数の内部で機能するように変更する方法がわかりません。
どんな助けでも大歓迎です。