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