簡體   English   中英

給定 k 個睡眠線程,我如何以 c 中的 fifo 順序喚醒它們

[英]Given k sleeping threads how can I wake them up in a fifo order in c

給定 k 個睡眠線程,我如何在 c 中按 fifo 順序喚醒它們然后對於下一個目錄,我想取先睡的線程

你可以用這樣的東西創建一個線程隊列:

static pthread_mutex_t  TQLock;
typedef struct tqnode TQNode;
struct tqnode {
    pthread_cond_t wait;
    TQNode *next;
    /* other stuff. */
};
static TQNode *list;

void *NewThread(void *arg) {
    TQNode *p = malloc(sizeof *p);
    if (!p) abort();
    pthread_cond_init(&p->wait, 0);
    while (DoSomething(arg)) {
        pthread_mutex_lock(&TQLock);
        /* append p on list */
        pthread_cond_wait(&p->wait, &TQLock);
        pthread_mutex_unlock(&TQLock);
    }
    pthread_cond_destroy(&p->wait);
    free(p);
    return 0;
}

int Dispatch(void) {
    TQNode *p;
    pthread_mutex_lock(&TQLock);
    if ((p = list)) != 0) {
        list = p->next;
        pthread_cond_signal(&p->wait);
    }
    pthread_mutex_unlock(&TQLock);
}

這將使它們通過列表先進先出,但是在線程釋放 TQLock 的那一刻,可能會喚醒另一個線程並將其擊敗到下一條指令。

暫無
暫無

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

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