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);

Вот работающий пример с указателями на функции.

Другие вопросы по тегам