我正在尝试在C和I中初始化SIMPLEQ_HEAD并收到以下错误:
# 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;
}
我的semaphore.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
答案 0 :(得分:0)
经过一些测试,我意识到了
sem->head = SIMPLEQ_HEAD_INITIALIZER( sem->head );
是一个静态操作,因此我无法动态创建信号量/ SIMPLEQ。
我将该行更改为
SIMPLEQ_INIT( &(sem->head) ); // note that you don't set anything equal to the result
动态地处理初始化,并解决了我的问题。