Я пытаюсь написать пользовательскую библиотеку потоков , поскольку в этой области, похоже, нет активной работы, и я считаю, что C ++ 0x обещания и фьючерсы могут дать этой модели некоторую мощность. К сожалению, для того, чтобы эта модель работала, важно обеспечить переключение контекста при блокировке вызовов. Поэтому я хотел бы перехватить каждый системный вызов, чтобы заменить его асинхронной версией. Есть несколько предостережений:
- Я знаю, что асинхронные системные вызовы существуют почти для каждого регулярного системного вызова, но по причинам обратной совместимости это нереальное решение.
- Я знаю, что в Linux 2.4 или более ранней версии можно было напрямую изменить таблицу sys_call_table, но это исчезло.
- Поскольку я хотел бы, чтобы моя библиотека была статически связана при желании, трюк LD_PRELOAD не является жизнеспособным.
- Аналогично, модули ядра не являются опцией, поскольку предполагается, что это библиотека пользовательского интерфейса.
- Наконец, ptrace () также не подходит по аналогичным причинам. У меня не может быть, чтобы моя библиотека разветвляла новый процесс только для того, чтобы его использовали.
Возможно ли это?