QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 879|回复: 3

高人帮我看一下这个程序

[复制链接]
发表于 2006-5-2 17:21:12 | 显示全部楼层 |阅读模式
产生两个线程,一个读,一个写,主要想试一下pthread_cond_wait()这个函数 编译没错,但运行老提示 段错误
void main ( void ){
pthread_t reader;
pthread_t writer;
//delay.tv_sec = 2;
//delay.tv_nec = 0;

pthread_mutex_init (&mutex,NULL);
pthread_cond_init(&cond,NULL);
pthread_create(&reader, NULL, (void *)&reader_function, NULL); 生成两个线程
pthread_create(&writer,NULL,(void*)&writer_function,NULL);
//writer_function( );
pthread_join(&reader,NULL);
pthread_join(&writer,NULL);

}

void writer_function (void){
while(1){

pthread_mutex_lock (&mutex);
while(buffer_has_item==1)
pthread_cond_wait(&cond,&mutex);
if (buffer_has_item==0){
buffer='a';
buffer_has_item=1;
pthread_cond_signal(&cond);
}

pthread_mutex_unlock(&mutex);

}
}

void reader_function(void){
while(1){
pthread_mutex_lock(&mutex);
while(buffer_has_item==0)
pthread_cond_wait(&cond,&mutex);

if(buffer_has_item==1){
printf("buffer=%c\n",buffer);
buffer_has_item=0;
pthread_cond_signal(&cond);
}
pthread_mutex_unlock(&mutex);

}
}

但是在主线程里用写函数,只生成一个线程的话,就没有错,但生成两个线程,主线程什么都不做的话,就提示有段错误
 楼主| 发表于 2006-5-2 17:50:49 | 显示全部楼层
好像问题就出在pthread_join上,但不知道是怎么回事
回复

使用道具 举报

发表于 2006-5-2 21:06:52 | 显示全部楼层
呵呵,我刚看"Advanced Linux Programming"这本书呢。
嗯,你没注意到吗?pthread_join的第一个参数是pthread_t类型的,不是pthread_t*。
(另外pthread_create的第三个参数类型应该是void* (*) (void*)。main函数还是返回一个int看着舒服点。)
回复

使用道具 举报

 楼主| 发表于 2006-5-2 23:09:43 | 显示全部楼层
呵呵,我好瓜,多谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 16:33 , Processed in 0.079375 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表