Я пытаюсь реализовать блокировку потока низкого уровня без использования динамического распределения памяти; этот код будет в основном использоваться на полностью голое ядро.Статическое выделение членов структуры внутри другой статической структуры?
Однако я сталкиваюсь с проблемой получения seg-ошибки, когда пытаюсь разыменовать элемент внутри этой глобальной статической структуры. Мой код как таковой
Моя обертка структура
/** LOCKING STRUCT & FUNCTIONS **/
struct lock {
int free;
struct thread_list* wait_list;
struct thread* current_holder;
};
вложенная структура (предназначен как связанный список рода сделки)
struct thread_list {
struct thread *head;
};
А член в этом списке
struct thread {
void *top; // top of the stack for this thread
void *sp; // current stack pointer for this thread (context)
void (*start_func)(void *);
void *arg;
int state;
int exit_value;
struct thread *join_thread;
struct thread *next_thread;
int id;
};
Метод, который я пытаюсь реализовать, как таковой
void lock_init (struct lock *lk) {
lk->free = 1; //Set lock as free
struct thread_list waiting = lk->wait_list; //Get waitlist, works fine
waiting->head = NULL; //Set waitlist's head to null, SEGFAULTS HERE
}
Я не супер владею C, но я не могу понять правильную методологию/синтаксис, чтобы заставить мой код работать так.
Эта строка: 'struct thread_list waiting = lk-> wait_list;' НЕ работает нормально. он устанавливает содержание структуры не указателя в указатель. Возможно, строка должна быть: 'struct thread_list * waitingPtr = lk-> wait_list;' или аналогичный – user3629249