Цель
Я пишу небольшую библиотеку, для которой переносимость является самой большой проблемой. Он был разработан для использования только в среде, в основном совместимой с C90 (ISO/IEC 9899:1990)... не более того. Набор функций, предоставляемых библиотекой, работает (чтение/запись) с внутренней структурой данных. Я рассматривал некоторые другие варианты дизайна, но ничего другого не представляется возможным для библиотеки пытается достичь.
Вопрос
Существуют ли какие-либо переносимые алгоритмы, методы или заклинания, которые можно использовать для обеспечения потокобезопасности? Я не беспокоюсь о том, чтобы сделать функции реентерабельными. Более того, меня не волнует скорость или (возможно) трата ресурсов, если алгоритм/техника/заклинание переносимы. В идеале я не хочу зависеть от каких-либо библиотек (таких как GNU Pth) или специфичных для системы операций (таких как atomic test-and-set).
Я рассматривал возможность изменения алгоритма пекарни Лампорта, но не знаю, как изменить его работать внутри функций, вызываемых потоками, а не в самих потоках.
Любая помощь приветствуется.