Вопрос по функции Getcontext - PullRequest
       0

Вопрос по функции Getcontext

3 голосов
/ 16 сентября 2011

Я пытаюсь реализовать библиотеку потоков пользовательского уровня.Функция Getcontext используется для сохранения контекста текущего потока в памяти.Функция Getcontext используется в 2 случаях

  1. Для сохранения текущего контекста и перехода к следующему потоку
  2. Для создания нового контекста

Но,в обоих случаях он возвращает одно и то же значение.Итак, как мне отличить эти 2 случая?

Спасибо

1 Ответ

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

getcontext не перемещается в новый поток, setcontext () и swapcontext () делают. Ваша библиотека потоков должна реализовывать как минимум эти 2 функции:

  1. Возможность создания новой темы.

  2. Возможность переключения на другой поток.

В первом случае вы вызываете getcontext () для инициализации ucontext_t, выделяете память для стека и устанавливаете указатель стека в ucontext_t, затем вызываете makecontext () для инициализации контекста с помощью начальной функции.

Во втором случае вы вызываете getcontext (), чтобы сохранить контекст для текущего потока, и setcontext (), чтобы переключиться на другой поток, который вы ранее сохранили. Или, чаще, вы бы использовали swapcontext, объединяющий вызовы get / setcontext. Смотрите, например здесь для очень простого способа реализации кооперативных потоков с помощью get / setcontext.

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