Я пытаюсь инициализировать SIMPLEQ_HEAD в C, и я и получаю следующее сообщение об ошибке:Ошибка инициализации SIMPLEQ_HEAD в C
# gcc -o semaphore semaphore.c
semaphore.c: In function `createSemaphore':
semaphore.c:10: syntax error before `{'
Мой semaphore.c класс выглядит:
#include <stdio.h>
#include "semaphore.h"
semaphore_t* createSemaphore(int initialCount)
{
semaphore_t* sem;
sem = (semaphore_t *) malloc(sizeof(semaphore_t));
sem->head = SIMPLEQ_HEAD_INITIALIZER(sem->head);
sem->count = initialCount; // set the semaphores initial count
return sem;
}
...
int main()
{
semaphore_t* my_semaphore = createSemaphore(5);
return 0;
}
И мой семафора .h выглядит следующим образом:
#ifndef SEMAPHORE_H
#define SEMAPHORE_H
#include <sys/queue.h>
#include <pthread.h>
#include <stdlib.h>
struct entry_thread {
int threadid;
SIMPLEQ_ENTRY(entry_thread) next;
} *np;
struct semaphore {
int count;
pthread_mutex_t mutex;
pthread_cond_t flag;
SIMPLEQ_HEAD(queuehead, entry_thread) head;
};
typedef struct semaphore semaphore_t;
semaphore_t* createSemaphore(int initialCount);
void destroySemaphore(semaphore_t* sem);
void down(semaphore_t* sem);
void up(semaphore_t* sem);
#endif
Я новичок в C и использовать SIMPLEQ, так что если кто-нибудь имеет опыт в этом я бы очень ар предоставьте некоторую помощь.
Для справки, страница людей SIMPLEQ_HEAD является: http://www.manualpages.de/OpenBSD/OpenBSD-5.0/man3/SIMPLEQ_HEAD.3.html
Я не читал все это, но то, что прыгает прямо в лицо: почему heck реализует * семафор * поверх * mutexes * и * condition variables *? Семафор * * намного проще, чем * mutex * и уже доступен в POSIX. ('sem_t', см. [' sem_init (3) '] (http://linux.die.net/man/3/sem_init)) –
Несвязанный, но: http://stackoverflow.com/questions/605845/do -i-cast-the-result-of-malloc – szczurcio
@FelixPalmen это для моего курса операционной системы, поэтому мы учимся реализовывать его самостоятельно. – Zach