线程学习日志精要.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线程学习日志精要

线程学习日志 计科3班 朱强线程概述 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。 线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。 线程的基本操作 1创建线程 int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrit attr, void *(*start_rtn)(void),void *restrict arg); 当函数返回时,tidp指向内核分配给线程的ID,attr表示线程的属性,一般设为NULL, start_rtn是个函数指针,start_rtn指向的函数是线程要执行的函数,一旦pthread_create成功返回,线程创建,就从start_rtn指向的函数开始执行代码。当从这个函数返回时,线程就停止运行了。 arg是start_rtn所指向的函数的参数,在线程开始执行时,该参数由内核负责传递给线程。 pthread_create函数成功调用返回0. 如果创建线程失败,返回的是错误编号 2.向线程体函数传递参数 pthread_creat函数在创建线程时由内核向新线程传递参数,如果需要传递多个参数则需要将所有参数组织在一个结构体内,再将结构体的地址作为参数传给新线程。 案例: #include stdio.h #include stdlib.h #include string.h #include pthread.h #define BUFS PIPE_BUF //PIPE_BUF管道默认一次性读写的数据长度 struct arg_struct { char arg1[10]; int arg2; float arg3; }; typedef struct arg_struct ARG; void *thread_func(void *arg) { ARG *p=(ARG *)arg; printf(arg1 is : %s,arg2 is:%d, arg3 is :%f\n,p-arg1,p-arg2,p-arg3); return NULL; } int main(int argc,char *argv[]) { pthread_t tid; ARG arg; int err; //对三个参数赋值,在创建线程之前 strcpy(arg.arg1,argv[1]); arg.arg2 = atoi(argv[2]); arg.arg3 = atof(argv[3]); err = pthread_create(tid,NULL,thread_func,(void *)arg); //创建线程,并传递参数 if(err !=0) { printf(create thread thread_func failed:%s\n,strerror(err)); exit(1); } pthread_join(tid,0);//等待子线程结束 return 0; } 运行结果: 3.线程访问资源的限制 在线程执行的过程中可以访问进程的资源,下面的例子在main函数创建了一个结构体,并初始化之,该结构体既有栈数据成员指针,又有堆数据成员指针。main线程睡眠5s,让子线程先执行,在线程thread_func()执行后,结构体数据增加。main线程使用的是已经发生改变的数据。 例子: #include stdio.h #include stdlib.h #in

文档评论(0)

shuwkb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档