rseq - интересная вещь, прошла мимо меня, спасибо за наводку.
(BTW, в комментах кто-то спросил то же самое, что и я - "а почему бы просто не сделать API запрета preemption потока"? Конечно, это очень опасное API при бездумном применении, но каждая фича потенциально опасна, если ее использовать не по назначению. Например, с футексами можно натворить черт-те чего)
Но тут у меня есть одно даже не возражение, а предупреждение. Использование новых kernel-specific feature хорошо, когда ваш продукт рассчитан на определенную платформу. Например, Linux kernel = 4.18.
Но когда вы пишете какую-то кросс-платформенную open-source либу, учет таких возможностей превращается в кошмар для разработчика (то есть вас).
Например, для линукса было бы здорово, чтобы ld при запуске процесса учитывал версию ядра и линковал именно ту функцию, которая рассчитана под это ядро, если таковая есть. Кстати, может такого рода фичи уже есть?.. Я знаю, что можно писать разные реализации под разную архитектуру (например, Sandy Bridge, Zen2, armv7...), а ld при загрузке выберет именно ту, на чем сейчас запускается процесс. Но учет версии ядра... такого не знаю.