Программирование на C - потоки и что такое void (* func) (void *, unsigned long) - PullRequest
3 голосов
/ 19 января 2012

Я смотрю на модификацию системы игрушечной ОС, и я просто пытаюсь изучить некоторый код и то, что он делает.Мне дали структуру «Поток», которая в качестве члена имеет структуру «pcb», которая является блоком управления процессом, который связывает поток с базовым физическим оборудованием, я полагаю.

В любом случае, в этой структуре "pcb" есть функция инициализации, которая инициализирует pcb вновь созданного потока.Вот определение функции:

void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
    void (*func)(void *, unsigned long));

Что касается кода, что означает последний аргумент?Относится ли это к коду или инструкциям

Концептуально, я не понимаю, как вещи вписываются в общую картину.Из того, что я знаю, поток - это единица выполнения кода;например, это может относиться к пользовательским программам, поэтому переключение между потоками быстро создает иллюзию параллельного запуска процессов.Хорошо, тогда этот поток нуждается в своем собственном стеке, регистрах (не понимаю) и некотором контроле (печатная плата).

Извините, если это повсеместно.Для справки я запускаю проект OS161 .

Спасибо.

Ответы [ 2 ]

7 голосов
/ 19 января 2012

Это указатель на функцию.Вы передаете ему адрес функции, которая возвращает void и принимает указатель void и длинную без знака.

Так, например, если у вас есть функция:

void myfunc(void *data, unsigned long number);

Тогда вы можетепередайте его в качестве четвертого аргумента md_initpcb.

Эта функция - код, который будет выполняться потоком, который вы создаете.Когда он закончится, закончится и нить.

2 голосов
/ 19 января 2012

void (*func)(void *, unsigned long) означает, что func - указатель на функцию, которая принимает void* и unsigned long и возвращает void. Я предполагаю, что этот параметр - это функция, которую будет запускать новый поток, а data1 и data2 - это параметры, которые новый поток передаст этой функции.

...