Я пишу библиотеку потоков в пространстве пользователя. У меня есть структура, которая управляет каждым потоком. Мои потоки очень просты, они берут функцию ptr и ее аргументы и просто запускают эту функцию один раз.
У каждого потока есть jmp_buf, и я использую setjmp и longjmp для переключения между потоками. Я не могу понять, как определить, когда эта функция завершена.
Для каждого потока я изменяю jmpbuf двумя способами.
- Я редактирую ПК и устанавливаю на него указатель на функцию, чтобы счетчик программ шел туда дальше.
- Я также заставляю каждого иметь свой собственный стек и редактирую SP, чтобы он указывал на этот стек
Таким образом, используя мою структуру управления потоками, я могу переключаться между потоками, и каждый из них поддерживает состояние, но не знаю, как определить, когда эта функция завершена. Когда он закончится, я хочу вызвать специальную функцию exit (), которая у меня есть.