实验七——线程同步及多线程编程

上传人:第*** 文档编号:32638372 上传时间:2018-02-12 格式:DOCX 页数:8 大小:115.47KB
返回 下载 相关 举报
实验七——线程同步及多线程编程_第1页
第1页 / 共8页
实验七——线程同步及多线程编程_第2页
第2页 / 共8页
实验七——线程同步及多线程编程_第3页
第3页 / 共8页
实验七——线程同步及多线程编程_第4页
第4页 / 共8页
实验七——线程同步及多线程编程_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《实验七——线程同步及多线程编程》由会员分享,可在线阅读,更多相关《实验七——线程同步及多线程编程(8页珍藏版)》请在金锄头文库上搜索。

1、实验七 线程同步与多线程编程一 实验目的:1. 了解系统中线程同步的基本原理。2. 了解与熟悉多线程编程与线程访问控制。二 实验内容及步骤:1. 生产者与消费者问题: 截图与分析源程序:程序代码注释:#include #include #include #include #include #include #include #include #include #include #define FIFO myfifo#define N 5int lock_var;time_t end_time;char buf_r100;/定义 buf_r 数组表示缓冲区sem_t mutex,full,emp

2、ty;/互斥信号量 mutex,信号量 empty 表示缓冲池中空缓冲区数量,full 表示满缓冲区数量int fd;void producer(void *arg);void consumer(void *arg);int main(int argc,char *argv)pthread_t id1,id2;pthread_t mon_th_id;int ret;end_time=time(NULL)+10;/*create a named pipe*/创建管道if(mkfifo(FIFO,0777|O_CREAT)#include int value=0;void *runner(void

3、 *param);/*runner 函数声明int main(int argc, char* argv)int pid;pthread_t tid;/定义一个线程标识符为 tid pthread_attr_t attr;/设定线程属性 pthread_attr_t 的变量为attrpid=fork();/为父进程 fork 一个子进程,返回值为 pidif(pid=0)/子进程的执行内容pthread_attr_init(/对线程属性变量进行初始化,使用默认值pthread_create(/创建一个标识符为 tid,线程属性为默认值,线程运行函数起始地址为 runner的线程pthread_j

4、oin(tid,NULL);/使子进程一直等待刚创建的 tid 线程运行结束,才开始继续运行printf(CHILD:value=%dn,value);else if(pid0)/父进程的执行内容wait(NULL);printf(PARENT:value=%dn,value);void *runner(void *param)/自定义一个线程运行函数,起始地址为runnervalue=5;pthread_exit(0);2. 程序运行结果分析:程序开始赋值给 value 为 0,而 pid 线进程的运行函数runner 任务是给 value 赋值为 5。之后在父进程中 fork 一个子进程,而子进程执行的内容是:创建了 pid 线程,用 pthread_join()等待 pid 线程运行结束。所以这时候,value 值就变为了 5.所以程序先输出: CHILD:5然后执行父进程内容,因为父进程执行内容与子进程无关,所以这时候的 value 值依然是前面的初始 value 值 0.所以程序接着输出:PARENT:0三 实验心得与体会:做这次实验的时候,感觉很多东西都不知道(可能上课没认真听吧(_) ) ,对于linux 下的 C 编程也有了更多的自己的感觉,对于我自己的编程有很大的帮助。除了学到编程体会外,这次试验至少也让我对于线程的同步,与进程,线程的结合使用有了更直观的认识。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号