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