Я пытаюсь использовать библиотеку C в Rust, автоматически создавая привязки с помощью bindgen. Используя эти привязки, я пишу Rust API, чтобы разработчики Rust могли использовать библиотеку C с хорошим Rust API. Все прекрасно работает, пока не задействованы потоки, и в этот момент я испытываю условия гонки и тупики.
Библиотека C была написана с учетом безопасности потоков и в значительной степени опирается на pthread_setspecific
и pthread_getspecific
для локального хранилища потоков. Я думаю, что вполне возможно, что условия гонки и взаимоблокировки вызваны кодом, связанным с локальными обработками потоков библиотеки C.
Возможно ли, что способ, которым Rust создает потоки, плохо сочетается с зависимостью библиотеки C от pthreads и что эта несовместимость вызывает проблемы, которые я вижу?
Я не знаю много о потоках Linux, хотя я потратил некоторое время, читая об этом в связи с этой проблемой.