||
线程的创建
int pthread_create(pthread_t *tid, const pthread_attr_t *attr,
void *(*start_rtn)(void), void *arg);
pthread_create创建成功时返回0,tid存放创建线程的id,第二个参数为创建线程的属性,第三个为线程的执行路径,第四个参数为传给创建线程的参数
线程的退出
线程可以选择三种方式退出,在不终止整个进程的情况下停止它的执行流。
进程中的其它线程通过pthread_join来获取线程的终止状态。
void pthread_exit(void *retval);
void pthread_join(pthread_t tid, void **retval);
给线程传递参数
分离线程
在默认情况下,线程的终止会保存到对该线程调用pthread_join,如果主线程对它所创建的线程的终止状态并不感兴趣,则可让线程处于分离状态,这样,线程的底层资源可以再线程终止时立即被回收。
创建带有分离属性的线程
pthread_t thread_id;
pthread_attr_t attr;
pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&thread_id, &attr, &print_xs, (void*)arg);
pthread_detach(thread_id);
pthread_attr_destroy(&attr);
//这时,即使调用也不能获取到创建线程的终止状态
int *res;
pthread_join(thread_id, &res);
使用pthread_detach使得指定线程处于分离转态
pthread_t thread_id;
pthread_create(&thread_id, &attr, &print_xs, (void*)arg);
pthread_detach(thread_id);
/* 或在创建的线程中分离自己,但如果线程调用pthread_detach之前,主线程已经调用thread_join,pthread_detach将不做任何事,此时pthread_join仍能获取到pthread_exit返回的状态。*/
void* print_xs (void* arg)
{
pthread_detach(pthread_self());
/* do some work */
}
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2025-1-15 12:24
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社