[英]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.