网站大量收购独家精品文档,联系QQ:2885784924

实验九_POSIX线程机制一.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验九_POSIX线程机制一

实验九 POSIX线程机制一 实验目的: 理解进程与线程的区别; 实现单线程与多线程控制了解线程机制 实验内容:实验步骤:(一)“hello world”单线程程序 图 1所示,观察输出结果,并分析原因。 //hello world单线程程序 # include stdio.h const NUM = 5; int main() { // void p_msg(char *); p_msg(hello); p_msg(world\n); } void p_msg(char *m) { int i; for(i = 0 ; i NUM ; i ++) { printf(%s,m); fflush(stdout); sleep(1); } } 图 1 单线程程序p_msg(hello),后运行p_msg(world\n),故先输出5个hello,1个world跟在后面,4个world换行回车。 (二)使用pthread_create创建线程 如果希望一个程序能同时执行很多函数,它创建多个线程,只要将上面的程序做两个小的改动,即可让程序执行两个函数。2中的程序是一个简单hello world”多线程程序。#include stdio.h #include pthread.h main() { pthread_t t1 , t2; void *p_msg(void *); pthread_create(t1,NULL,p_msg,(void * )hello ); pthread_create(t2,NULL,p_msg,(void * )world\n); pthread_join(t1, NULL); pthread_join(t2, NULL); } void *p_msg(void *m) { int i; for(i = 0 ; i 5 ; i ++) { printf(%s,m); fflush(stdout); sleep(1); } return NULL; } 图 2 多线程程序 提示:POSIX标准族中包含有线程标准,有关的系统调用名字以“pthread_”打头。为了使用这些函数,须对_REENTRANT宏进行定义,该宏包括在头文件pthread.h中,链接这些线程函数库时要使用编译器命令的“-lpthread”选项。 思考: 编译连接通过后,多次运行程序,查看输出结果。pthread_create(t1,NULL,p_msg,(void * )hello); pthread_create函数的作用是创建一个线程,其原型如下: int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg); 参数thread:如果创建线程成功,标识本线程的唯一标识符通过本变量返回给函数调用者; 参数attr:调用者通过该参数描述期望创建的线程具有什么样的属性,传入NULL表示使用默认属性; 参数start_routine:线程的运行实体; 参数arg:传递给线程实体的参数; 返回值:0成功,非0为错误码; pthread_join函数的作用是什么?尝试将pthread_join删除,或将pthread_join换成pthread_exit,观察运行结果的变化。 实例:pthread_join(t1,NULL); pthread_join函数的作用是等待另外某一个线程结束,其原型如下: int pthread_join(pthread_t th, void **thread_return); 参数th:描述等待哪一个线程结束,其取值为pthread_create函数第一个参数的返回值; 参数thread_return:被等待线程结束时的返回值,等于pthread_exit函数的参数; 改为pthread_exit后结果无变化: 将pthread_join删除后: 会这样是因为两个线程在sleep(1)的时间里进程运行完毕结束。线程被迫结束。 进程放后台运行,用ps观察进程状态,用pstree观察是否有子进程产生。 没有子进程产生 改写代码,使同样的输出内容由并发的父子进程实现。进程放后台运行,用ps观察进程状态。与先前的观察有什么不同?请分析原因,体会进程和线程概念的差异。 test3.c #include stdio.h const NUM = 5; int main() { // void p_msg(char *); int p1; while((p1=fork())==-1); if(p10) { /*

文档评论(0)

小教资源库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档