欢迎来到天天文库
浏览记录
ID:48058357
大小:1.60 MB
页数:25页
时间:2020-01-13
《Linux 多线程技术.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux多线程技术POSIX线程库Pthreads使用fork()创建进程代价昂贵进程间通信方式较复杂操作系统在实现进程间的切换比线程切换更费时使用pthreads库创建线程创建进程比创建线程更快线程间的通信方式更容操作系统对线程的切换比对进程的切换更容易和快速线程的创建#includeintpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);第一个参数为指向线程标识符的指针。第二
2、个参数用来设置线程属性。第三个参数是线程运行函数的起始地址。最后一个参数是运行函数的参数。当创建线程成功时,函数返回0,若不为0则说明创建线程失败,常见的错误返回代码为EAGAIN和EINVAL。前者表示系统限制创建新的线程,例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。一个简单例子#include#include#include#include#includepthread_tntid;void*t
3、hr_fn(void*arg){ printids("newthread:"); return((void*)0);}intmain(){ interr; err=pthread_create(&ntid,NULL,thr_fn,NULL); if(err!=0){ printf("can'tcreatethread:%s",strerror(err)); return1; } sleep(1); return0;}编译多线程程序gcc-omypthread-lpthreadmypthread
4、.c线程的退出调用pthread_exit()结束线程执行voidpthread_exit(void*retval);让线程处理程序返回使用pthread_cancel()函数终止其他线程的执行intpthread_cancel(pthread_tthread);向线程t发送取消请求,默认情况下线程thread自己调用pthread_exit(PTHREAD_CANCELED),等待线程结束使用pthread_join()函数等待被创建的线程结束pthread_join()函数会挂起创建线程的线程的执行直到等待到想要等待的子线程函数
5、原型:intpthread_join(pthread_tth,void**thread_return);线程的分离主线程可以不断地创建子线程子线程本身自己有自我回收内存资源的能力函数原型:intpthread_detach(pthread_tth);pthread_detach()和pthread_join()一般情况下不能同时使用获得当前线程的标志pthread_tpthread_self(void);本函数返回本线程的标识符。在LinuxThreads中,每个线程都用一个pthread_descr结构来描述,其中包含了线程状态、
6、线程ID等所有需要的数据结构,此函数的实现就是在线程栈帧中找到本线程的pthread_descr结构,然后返回其中的p_tid项。一个例子#include#include#include#include#defineTHREAD_NUMBER2intretval_hello1=2,retval_hello2=3;void*hello1(void*arg){char*hello_str=(char*)arg;sleep(1);printf("%s",h
7、ello_str);pthread_exit(&retval_hello1);}void*hello2(void*arg){char*hello_str=(char*)arg;sleep(2);printf("%s",hello_str);pthread_exit(&retval_hello2);}intmain(intargc,char*argv[]){inti;intret_val;int*retval_hello[2];pthread_tpt[THREAD_NUMBER];constchar*arg[THREAD_NUMB
8、ER];arg[0]="helloworldfromthread1";arg[1]="helloworldfromthread2";printf("Begintocreatethreads...");ret_val=pthread
此文档下载收益归作者所有