C pthread加入/退出线程(退出不工作)

时间:2017-05-17 14:14:10

标签: c linux multithreading pthreads

我试图学习线程,但我有一个问题.. 我正在尝试创建ThreadCount定义的多个Thread,并在完成工作后关闭它们。

#define ThreadCount 5

只是我主要的一小部分

pthread_t pro;
pthread_t con[ThreadCount];
pthread_attr_t attr;
pthread_attr_init(&attr);

pthread_create(&pro, &attr, producer, fifo);
for(unsigned int i = 0; i <ThreadCount;++i){
    pthread_create (&con[i], NULL, consumer, createhilfsStruct(i,fifo));
}
for(unsigned int i = 0; i <ThreadCount;++i){
    pthread_join (con[i], NULL);
}
pthread_join (pro, NULL);
printf("Done");
pthread_exit(NULL);

__

typedef struct{
    int threadName;
    queue* queue;
}hilfsStruct;

typedef struct {
    job* buf[QUEUESIZE];
    long head, tail;
    int full, empty, currentPages, done;
    pthread_mutex_t *mut;
    pthread_cond_t *notFull, *notEmpty;
} queue;

hilfsStruct* createhilfsStruct(int threadName, queue* q){
    hilfsStruct* h = (hilfsStruct*)malloc (sizeof (hilfsStruct));
    h->queue = q;
    h->threadName = threadName;
    return h;
}

queue *queueInit (void) {
    queue *q;

    q = (queue *)malloc (sizeof (queue));
    if (!q) return (NULL);

    q->empty = 1;
    q->full = 0;
    q->head = 0;
    q->tail = 0;
    q->currentPages = 0;
    q->done = 0;
    q->mut = (pthread_mutex_t *) malloc (sizeof (pthread_mutex_t));
    pthread_mutex_init (q->mut, NULL);
    q->notFull = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
    pthread_cond_init (q->notFull, NULL);
    q->notEmpty = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
    pthread_cond_init (q->notEmpty, NULL);

    return (q);
}

在我的消费者功能中,我有一个查询来检查fifo-&gt; done是否为真,如果是真的我使用exit(0);杀死程序==&gt;主要的cant中的printf(&#34;完成&#34;)被称为[明显]

如果我将退出(0)换成pthread_exit(3); //我在网上找到了这个,但我无法弄清楚为什么3

它没有退出线程,程序只是空闲,永远不会关闭/永远不会到达pthread_join以下的任何内容

我的第一次尝试是使用pthread_t con, pro;代替pthread_t con[..],而只使用pthread_join(con,NULL),但这也不起作用。

我做错了什么?

Ty伙计们,祝你有愉快的一天

0 个答案:

没有答案