int swapcontext (ucontext_t * oucp, ucontext_t * ucp);
Функция swapcontext()
сохраняет текущий контекст в структуре, на которую указывает oucp, а затем активирует контекст, на который указывает ucp.
Слово «Контекст» относится ко всем важным регистрам процессора, которые представляют текущее состояние системы. Список этих регистров зависит от архитектуры вашего компьютера, но наиболее важными являются: указатель стека, счетчик программ, регистр связи (для ARM, PowerP C и PA-RIS C, в котором сохраняется обратный адрес) и т. Д. c , Эти регистры будут сохранены в oucp
. Кроме того, будет загружаться из ucp
для каждого активирующего контекста, который из-за установки значения P C, возможно, выполняет скачок.
Итак, согласно вашему коду:
1 |volatile int done = 0;
2 |
3 |int main() {
4 |
5 |
6 | ucontext_t one;
7 | ucontext_t two;
8 |
9 |
10| getcontext(&one);
11| printf("done = %d\n", done);
12| if(!done) {
13| done = 1;
14| printf(" - gurka -\n");
15| swapcontext(&two, &one);
16| printf(" - tomat -\n");
17| } else {
18| printf(" - salad -\n");
19| swapcontext(&one, &two);
20| printf(" - morot -\n");
21| }
22| printf(" - potät -\n");
23| return 0;
24|}
В строке # 15 будет загружен контекст one
. Код перейдет к строке # 11.
В строке # 19 будет загружен контекст two
. Код переместится на строку # 16.
Обратите внимание, что getcontext
просто сохраняет текущий контекст. Вы можете получить более подробную информацию об этих типах функций через Интернет, прибегая к помощи.