pthread_join 函数报段错误 ??????
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_fn(void*);
struct foo* foo_aloc(void);
void foo_hold(struct foo*);
void foo_rele(struct foo*);
void my_err(char *);
struct foo
{
int f_count;
pthread_mutex_t f_lock;
/* More stuff here */
};
//主函数
int main(void)
{
printf("start\n");
struct foo*fp;
pthread_t tid;
/* 为了便于调试错误,注掉了
if((fp=foo_aloc())==NULL)
my_err("foo_aloc error\n");
*/
if((tid=pthread_create(&tid,NULL,thread_fn,NULL))!=0)
my_err("pthread_create error\n");
sleep(1);
printf("will join\n");
/* Wait the second thread run over */
//错误就在这里:join函数报段错误!谁能告诉我,这是为什么?????
if(pthread_join(tid,NULL)!=0)
my_err("pthread_join error");
// printf("after join,pthread_exit return:%d\n",(int)ret);
int i;
printf("after join\n");
/*
for(i=0;i<10;i++)
{
printf("f_count:%d\n",fp->f_count);
foo_rele(fp);
}
if(fp==NULL)
printf("fp is NULL now");
*/
printf("end\n");
exit(0);
}
void* thread_fn(void *arg)
{
printf("thread_fn is running\n");
/* int i;
struct foo *fp=(struct foo*)arg;
for(i=0;i<10;i++)
{
fp->f_count++;
}
*/
printf("thread will return \n");
return (void*)0;
}
struct foo* foo_aloc(void)
{
struct foo *fp;
if((fp=malloc(sizeof(struct foo)))!=NULL)
{
//fp->f_count=1;
if(pthread_mutex_init(&fp->f_lock,NULL)!=0)
{
free(fp);
return NULL;
}
/* Continue initialization */
}
return fp;
}
/* Add a reference to the object */
void foo_hold(struct foo *fp)
{
pthread_mutex_lock(&fp->f_lock);
fp->f_count++;
pthread_mutex_unlock(&fp->f_lock);
}
/* Release a reference to the object */
void foo_rele(struct foo *fp)
{
pthread_mutex_lock(&fp->f_lock);
if(--fp->f_count==0)
{
pthread_mutex_unlock(&fp->f_lock);
pthread_mutex_destroy(&fp->f_lock);
free(fp);
}
else {
pthread_mutex_unlock(&fp->f_lock);
}
}
void my_err(char *str)
{
perror(str);
exit(1);
}
主函数中,为便于调试,注掉了一些代码。当运行到pthread_join 时,程序报段错误:Segmentation fault.自己查看了下说明文档,就是这样用啊,为啥会报错呢?求各位前辈指点。
...全文
相关推荐
Linux pthread相关函数用法说明(包括发生段错误的原因以及对策等)
### 3. pthread_join(非分离状态,阻塞)#### 函数原型```cint pthread_join(pthread_t thread, void **retval);```#### 函数功能使当前线程阻塞
LINUX 函数手册
通过fork()、exec()系列函数可以创建和控制进程,而pthread_create()、pthread_join()等函数则用于线程操作。
TCP多进程/多线程并发服务器详解[源码]
;线程创建后应立即调用pthread_detach将其设为分离状态,使线程终止时系统自动回收其内核资源,无需主线程显式调用pthread_join;在客户端地址转换环节,必须使用线程安全版本的inet_ntop
linux先进的编程技巧.rar
六、多线程编程pthread库提供了在Linux上进行多线程编程的接口,如pthread_create()创建线程,pthread_join()等待线程结束,pthread_mutex_系列函数处理互斥锁
Linux 篇数字世界的线程工坊 - Linux 线程控制与自研线程库深度实战解析
pthread_create函数是构建新线程的唯一标准接口,其参数不仅包含入口函数指针与传入参数,更关键的是支持传入一个指向pthread_attr_t类型的属性对象指针。


