Posix多线程编程学习笔记.docVIP

  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文档。上传文档
查看更多
Posix多线程编程学习笔记.doc

Posix多线程编程学习笔记(一)—线程基础(1) 一.什么是线程 典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。 二.线程的优点 (1) (2) (3) (4) 三.线程的缺点 线程也有不足之处。编写多线程程序需要更全面更深入的思考。在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的。调试一个多线程程序也比调试一个单线程程序困难得多。 四.线程的结构 线程包含了表示进程内执行环境必需的信息,其中包括进程中标识线程的线程ID,一组寄存器值、栈、调度优先级和策略、信号屏蔽子,errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本,程序的全局内存和堆内存、栈以及文件描述符。 五.线程标识 就像每个进程有一个进程ID一样,每个线程也有一个线程ID,进程ID在整个系统中是唯一的,但线程不同,线程ID只在它所属的进程环境中有效。线程ID用pthread_t数据类型来表示,实现的时候可以用一个结构来代表pthread_t数据类型,所以可以移植的操作系统不能把它作为整数处理。因此必须使用函数来对来对两个线程ID进行比较。 1. 名称:: pthread_equal 功能: 比较两个线程ID 头文件: #include pthread.h 函数原形: int pthread_equal(pthread_t tid1,pthread_t tid2); 参数: tid1 进程1id tid2 进程2id 返回值: 若相等返回非0值,否则返回0 2. 名称:: pthread_self 功能: 获取自身线程的id 头文件: #include pthread.h 函数原形: pthread_t pthread_self(void); 参数: 无 调用线程的线程id Posix多线程编程学习笔记(一)—线程基础(2) 3. 名称:: pthread_create 功能: 创建线程 头文件: #include pthread.h 函数原形: int pthread_create(pthread_t *restrict tidp, const pthread _attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg); 参数: 返回值: 若成功返回则返回0,否则返回错误编号 当pthread_creat成功返回时, tidp指向的内存单元被设置为新创建线程的线程ID。 attr参数用于定制各种不同的线程属性。可以把它设置为NULL,创建默认的线程属性。 新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg, 如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。 #include pthread.h void printids(const char *s) { printf(“%s pid:%u tid:%u \n“, getpid(),pthread_self()); } void *thr_fn(void *arg) { printf (“new thread: “); } int main() { int err; pthread_t tid; err=pthread_create(tid,NULL,thr_fn,NULL); if(err=0) printf(“can’t create thread:%s\n”,strerror(err)); printids(“main thread: “); sleep(1); exit(0); } 关于进程的编译我们都要加上参数 –lpthread 否则提示找不到函数的错误。 具体编译方法是 cc –lpthread –o gettid gettid.c 运行结果为 main thread: pid 14954 tid 134529024 new thread: pid 14954 tid 134530048 七..线程的终止 线程是依进程而存在的,当进程终止时,线程也就终止了。当然也有在不终止整个进程的情况下停止它的控制流。 (1)线程只是从启动例程中返回,返回值是线程的退出码。 (2)线程可以被同一进程中的其他线程取

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档