簡體   English   中英

Posix信號量。 為什么我的線程不會像預期的那樣在sem_wait()上等待?

[英]Posix Semaphores. Why will my threads not wait at sem_wait() like they're supposed to?

有問題的代碼是:

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); 編輯:這應該是sem_init(&insert, 0, 1)我在代碼攪拌,只是沒有將其設置回...這兩種方式均不起作用。

據我了解,線程應在sem_wait()處等待,直到該值大於零為止。 但是,調試顯示函數中有多個線程。 烏格

因此,我只是不了解信號量是做什么的嗎?

編輯:OS X不支持未命名的信號量...但是,即使使用insert = sem_open("insert", O_CREAT, 1); 允許所有線程通過我的sem_wait()行。

謝謝鴨子幫助我。

Apple gcc在semaphores.h中定義了sem_init,但它返回-1-未實現。 也就是說,您不能有未命名的信號燈。 而是使用sem_open(name, options, initial value);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM