资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
实验七 线程同步与多线程编程一 实验目的: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,empty;/互斥信号量 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 *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_join(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 编程也有了更多的自己的感觉,对于我自己的编程有很大的帮助。除了学到编程体会外,这次试验至少也让我对于线程的同步,与进程,线程的结合使用有了更直观的认识。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号