複数のpthreadで使用されているキュー構造があります。スレッドが空でない場合、スレッドはキューからデキューしてからビジネスを実行することになっています。
私は当初、これをwhileループとして設定し、スレッドがmutex_lockを使用してキューが空かどうかをチェックしました。残念ながら、これは私のプログラムをクロールまで遅くしました。
キューの「カウント」変数としてセマフォを実装しようとしましたが、残念ながら、sem_wait()を呼び出そうとするとセグメンテーション違反が発生します。gdbとsemaphore.hが一緒にうまく機能しないことがわかったので、私は本当に途方に暮れています。私は初心者の間違いを犯している可能性があるので、助けや提案をいただければ幸いです。
キュー構造:
typedef struct {
int q[QUEUESIZE+1];
int first;
int last;
sem_t count;
} queue;
これが初期化です:
queue *CreateQueue(void)
{
queue *q;
q = (queue*)malloc(sizeof(queue));
if (q == NULL)
return NULL;
q->first = 0;
q->last = 0;
sem_init(&(q->count),0, 0);
}
そして、私は必ず電話します:
queue *q;
q = CreateQueue();
スレッドが作成される前。
これがセグメンテーション違反の呼び出しです
void *ThreadWait(void *t) {
while(1) {
sem_wait(&(q->count)); //THIS SEGFAULTS
ThreadFun(); //this is the function the thread would go to to do all the work
}
}
これが私の側の単純な間違いであり、今は見えないことを願っています。
前もって感謝します。
編集:いくつかの明確なコードを追加する