pthread库提供的函数名和意义,pthread库的使用方法
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!
1、若线程创建成功,则返回0。若线程创建失败,则返回出错编号,并且*thread中的内容是未定义的。
2、返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于指定各种不同的线程属性。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。
3、linux下用C语言开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。
4、由 restrict修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由 restrict修饰的指针表达式中。由 restrict修饰的指针主要用于函数形参,或指向由 malloc()分配的内存空间。restrict数据类型不改变程序的语义。编译器能通过作出 restrict修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程。第一个参数为指向线程标识符的指针。
5、第三个参数是线程运行函数的起始地址。
6、最后一个参数是运行函数的参数。#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#include<string.h>voidprintids(constchar*s){pid_tpid;pthread_ttid;pid=getpid();tid=pthread_self();printf(%spid%utid%u(0x%x)\n,s,(unsignedint)pid,(unsignedint)tid,(unsignedint)tid);}void*thr_fn(void*arg){printids(newthread:);returnNULL;}intmain(void){interr;pthread_tntid;err=pthread_create(&ntid,NULL,thr_fn,NULL);if(err!=0)printf(can'tcreatethread:%s\n,strerror(err));printids(mainthread:);pthread_join(ntid,NULL);returnEXIT_SUCCESS;}$ gcc main.c-o main-std=c99-pthread
7、main thread: pid 13073 tid 3077572816(0xb77008d0)
8、new thread: pid 13073 tid 3077569392(0xb76ffb70)#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#defineNUM_THREADS8void*PrintHello(void*args){intthread_arg;sleep(1);thread_arg=(int)(*((int*)args));printf(Hellofromthread%d\n,thread_arg);returnNULL;}intmain(void){intrc,t;pthread_tthread[NUM_THREADS];for(t=0;t<NUM_THREADS;t++){printf(Creatingthread%d\n,t);rc=pthread_create(&thread[t],NULL,PrintHello,&t);if(rc){printf(ERROR;returncodeis%d\n,rc);returnEXIT_FAILURE;}}sleep(5);for(t=0;t<NUM_THREADS;t++)pthread_join(thread[t],NULL);returnEXIT_SUCCESS;}$ gcc thread_test.c-o thread_test-std=c99-pthread
1、 C语言使用pthread_create()函数完成多线程的创建,pthread_create()函数共有四个参数。这四个参数分别为:
2、第一个参数负责向调用者传递子线程的线程号
3、第二这个参数负责控制线程的各种属性,这也是线程在创建的时候,最为复杂的一个参数。下面是这个结构体的定义:
4、在结构体中的第一个参数 detachstate说明了线程的分离状态。
5、 PTHREAD_CREATE_DETACHED分离状态:父线程在创建子线程之后,,父线程不会去等待子线程结束再去运行自己接下来的程序;
6、 PTHREAD_CREATE_JOINABLE状态:父线程会等待子线程运行结束,才继续运行接下来的程序。
7、注意的是如果当线程一旦处于 PTHREAD_CREATE_DETACHED状态,那么线程的状态就无法再被修改了。线程创建时默认设置为PTHREAD_CREATE_JOINABLE状态
8、 schedpolicy说明的是线程的调度策略,这个值可以分别被设置为:
9、 schedparam参数实际上设置的是线程的优先级。这个参数仅当调度策略为实时(即SCHED_RR或SCHED_FIFO)时才有效
10、这个参数设置线程的调度参数是拷贝父线程的线程调度参数,还是上面的两个参数 schedpolicy和 schedparam属性进行设置。
11、 PTHREAD_INHERIT_SCHED:表示新现成将继承创建线程的调度策略和参数)
12、 PTHREAD_EXPLICIT_SCHED:表示使用在schedpolicy和schedparam属性中显式设置的调度策略和参数
13、 scope参数设置的是线程优先级的使用范围。
14、 PTHREAD_SCOPE_PROCESS进程级竞争资源
15、 PTHREAD_SCOPE_SYSTEM系统级竞争资源
16、这个参数是线程栈的起始地址,这个参数只有在线程栈由自己创建时,才需要设置。当线程栈由用户直接创建,而不是通过系统创建时,线程栈的大小和位置都可以进行修改,但是用户程序需要完成对线程栈空间的释放。在设置该参数之后,guardsize警戒栈缓冲区的大小就变为0,为了防止栈溢出就需要对线程栈的境界栈缓冲区进行设置。
17、这个参数设置警戒栈缓冲区的大小。警戒栈缓冲区可以保护程序,防止栈溢出对数据造成破坏。
18、 stacksize参数在线程创建之前创建,用来修改创建的线程栈的大小,但是最小不能低于 PTHREAD_STACK_MIN(16384) bytes,即16k内存大小,也就是4个内存页(4个内存页这一点由内核决定)。
19、这个参数负责指定子线程需要允许的函数,这个参数需要的是一个函数指针。
20、这个参数负责指定,子线程所运行的函数的参数值。
wwW.Xtw.Com.cN系统网专业的PC、手机系统开发下载平台,HarmonyOS系统、安卓、OS、windows电脑重装系统在线下载安装,操作系统平台技术学习,攻略教程,技术交流。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com