Почему makecontext не работает с pthreads - PullRequest
7 голосов
/ 17 ноября 2011

Из руководства makecontext ...

Из-за ограничений в текущей реализации pthread, makecontext не должен использоваться в программах, которые ссылаются на библиотеку pthread (3) (независимо от того, используются потоки или нет).).

Теперь мой вопрос: почему это не работает и каковы альтернативные методы.На самом деле меня интересует переключение стеков в потоке пользовательского уровня в некоторые моменты, но я вижу, что когда я делаю swapcontext, то время от времени я получаю ошибки сегментации.Что мне делать?

Я хочу добиться чего-то подобного ...

void thread_func(void * thread_args)
{
 a();
 b();
 getcontext/makecontext/swapcontext to call c();
 d();
 ....
}

Так что в этом случае я хочу использовать отдельный стек при выполнении функции c .

1 Ответ

9 голосов
/ 17 ноября 2011

Из-за ограничений в текущей реализации pthread, makecontext не должен использоваться в программах, которые ссылаются на библиотеку pthread (3)

Этот раздел руководства относится к LinuxThreads, который использовался для округления значения %esp до текущего дескриптора потока. Это (очевидно) не приведет к созданию правильного дескриптора потока, если вы выполняете в альтернативном стеке.

LinuxThreads больше не используется ни одним Linux, распространяемым в последние 5+ лет, и {get,make,swap}context прекрасно работает с потоками NPTL.

РЕДАКТИРОВАТЬ: На самом деле я вижу "из-за ограничений" только в Документы NetBSD , а не в Документы Linux .

когда я делаю swapcontext, то время от времени я получаю ошибки сегментации

У вас есть ошибка, которая время от времени проявляется как ошибка сегментации. Вы не предоставили достаточно информации, чтобы угадать, где может быть эта ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...