Q: what is thread ?
A:一个正在运行的函数----是运行函数咯----多线程共享内存空间咯
posix线程是一套标准,而不是实现
线程标识: pthread_t 类型不确定:结构体?or指针?or整型数,想啥是啥,可以自己定义咯
lhh@lhh:~$ ps axm
lhh@lhh:~$ ps ax -L // LWP
进程就是容器 内部装载线程
函数:
int pthread_equal(pthread_t t1, pthread_t t2);//比较两个线程是否相同;相同返回非0 否则返回0
pthread_t pthread_self(void); //返回当前线程标识;
1.创建一个线程:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
参数1:回填线程表示
参数2:线程的属性:常用NULL
参数3:函数指针 ----兄弟线程
参数4:兄弟线程的参数
返回值:成功返回0;失败直接返回error number
2.线程的终止:
3种方式:1)线程从启动例程返回,返回值就是线程的退出码
2)线程可以被同一进程中的其他线程取消
3)线程调用pthread_exit()函数
void pthread_exit(void *retval);//线程终止
int pthread_join(pthread_t thread, void **retval);//线程收尸 成功返回0,错误返回error number **retval只收尸不关心状态
3.栈的清理:
//钩子函数 void pthread_cleanup_push(void (*routine)(void *),void *arg);void pthread_cleanup_pop(intexecute);
eg:
#include #include
static void *func(void *p)
{
puts("Thead is working!");
pthread_exit(NULL);
}intmain()
{
pthread_t tid;interr;
puts("Begin !");
err= pthread_create(&tid,NULL,func,NULL);if(err)
{
fprintf(stderr,"%s",strerror(err));
exit(1);
}
pthread_join(tid,NULL);
puts("End !");
exit(0);
}
View Code
OK!休息休息,下节继续!
eg:
#include #include#include#include
void *cleanup_func(void *p)
{
puts(p);
}void *func(void *p)
{
puts("Thead is working !");
pthread_cleanup_push(cleanup_func ,"cleanup:1");
pthread_cleanup_push(cleanup_func ,"cleanup:2");
pthread_cleanup_push(cleanup_func ,"cleanup:3");
pthread_cleanup_pop(1);
pthread_cleanup_pop(0);
pthread_cleanup_pop(1);
pthread_exit(NULL);
}intmain()
{
pthread_t tid ;interr ;
puts("Begin !");
err= pthread_create(&tid,NULL,func,NULL);if(err)
{
fprintf(stderr,"%s",strerror(err));
exit(1);
}
pthread_join(tid,NULL);
exit(0);
}
View Code
4.线程取消
int pthread_cancel(pthread_t thread);//取消线程:正在运行的线程先取消再收尸