我试图学习线程,但我有一个问题.. 我正在尝试创建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伙计们,祝你有愉快的一天