問題のコードは次のとおりです。
void insertIntoFinalArray(char * string) {
sem_wait(&insert);
if (finalarray == NULL) finalarray = (char **) malloc(sizeof(char *));
else finalarray = (char **) realloc(finalarray, ((size_final + 1) * sizeof(char *)));
finalarray[size_final] = (char *) malloc(sizeof(string) + 1);
strcpy(finalarray[size_final], string);
size_final++;
sem_post(&insert);
}
insert はsem_init(&insert, 0, 0);
EDIT として初期化されます: これは、sem_init(&insert, 0, 1)
私がコードをかき混ぜていて、元に戻さなかったと思われます...どちらの方法でも機能しません。
私が理解しているように、スレッドは値がゼロより大きくなるまで sem_wait() で待機する必要があります。ただし、デバッグでは関数内に複数のスレッドが表示されます。
セマフォが何をするのか理解していないだけですか?
編集:OS Xは名前のないセマフォをサポートしていません...ただし、使用してもinsert = sem_open("insert", O_CREAT, 1);
、すべてのスレッドがsem_wait()行を通過できます。