thread_fork работает над ядром
Я работаю на OS161, где библиотека C pthread не поддерживается в первую очередь. Моя текущая цель - понять вызовы sys и запустить несколько простых программ.
моя простая функция имеет следующий код:
int id = 1;
long id2 = 1;
int ret = thread_fork("myThread", (void *)id, id2, void (*function)((void *)id, id2), NULL);
kprintf("\nHello World\n");
return;
`
где вызов thread_fork int thread_fork(const char *name,
void *data1, unsigned long data2,
void (*func)(void *, unsigned long),
struct thread **ret);
Я изменил файл conf.kern, чтобы включить этот файл во время загрузки, и изменил main.c, чтобы добавить этот вызов функции. Все работает нормально, если я удалю поток вызова.
Разве это не правильный способ реализации кода потока или я где-то не так?
1 ответ
Я не знаком с OS161, но у вас есть синтаксис для неправильной передачи указателя на функцию в C, и вы не дали thread_fork
в любом месте, чтобы вернуть указатель потока.
Сначала указатель на функцию. thread_fork
ожидает указатель на функцию, которая принимает два параметра. Ваша функция должна выглядеть так:
void function(void *data1, unsigned long data2) {
kprintf("Called with data1=%p, data2=%ld\n", data1, data2);
}
Тогда ваш звонок thread_fork
выглядит так Обратите внимание, что есть память для возвращенного указателя потока, которая может быть необходима, если OS161 не обрабатывает случай NULL:
int id1 = 1;
unsigned long id2 = 2;
struct thread *thr;
thread_fork("myThread", &id1, id2, function, &thr);