操作系统Ubuntu(实验三四)
实验三四
- 3._实验三:Linux进程/线程的异步并发执行
- 3.1_fork()函数创建子进程
- 3.2_创建线程
- pthread_create();
- 4._实验四:使用信号量进行互斥与同步
- 4.1_信号量初使用
- (1)信号量简单介绍
- (2)信号量以及P、V操作的使用方法
- (2)利用信号量实现同步互斥
3._实验三:Linux进程/线程的异步并发执行
3.1_fork()函数创建子进程
fork()函数用法解释
个人观点:
#include <unistd.h>
#include <stdio.h>
int main ()
{ pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("i am the child process, my process id is %d/n",getpid()); printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 count++; } else { printf("i am the parent process, my process id is %d/n",getpid()); printf("我是孩子他爹/n"); count++; } printf("统计结果是: %d/n",count); return 0;
}
当执行到代码段fpid=fork(); 时,此时新建了一个子进程,其直观图如下:
练习:
画出流程图
#include <unistd.h>
#include <stdio.h>
int main(){pid_t son_pid,daughter_pid;int count = 1;son_pid = fork();if(son_pid == 0){count++;printf("i am son,count = %d\n",count);}else{daughter_pid = fork();if(daughter_pid == 0){count++;printf("i am daughter, count = %d\n",count);}else{count++;printf("i am father,ID = %d, count = %d\n",daughter_pid,count);waitpid(son_pid,NULL,0);waitpid(daughter_pid,NULL,0);}}
}
3.2_创建线程
pthread.h的使用
pthread_create();
创建两个线程即函数son()和函数daughter();两者执行顺序随机且同步
4._实验四:使用信号量进行互斥与同步
4.1_信号量初使用
(1)信号量简单介绍
Linux提供两种信号量:
内核信号量:用于内核中资源共享控制
用户态信号量:主要包括POSIX信号量和SYSTEM V信号量。其中POSIX信号量分为两类。
无名信号量:主要用于线程间同步,也可用于进程间(由fork产生)同步。
有名信号量:既可用于进程间同步,也可用于线程间同步。
(2)信号量以及P、V操作的使用方法
POSIX有名信号量主要包括:
sem_t* sem_open(const char *name, int oflag, mode_t mode, int value);
//例如:创建一个互斥信号量mutex,初值为1即mutex = 1,访问权限为0666(我也不知道啥意思),
//如信号量存在,则打开之,如不存在,则创建
sem_t* mutex("mutex",O_CREATE,0666,1);
①name: 文件名路径,如’mysem’,会创建/dev/shm/sem.mysem
②oflag:O_CREATE或O_CREATE | O_EXCL
O_CREATE:如信号量存在,则打开之,如不存在,则创建
O_CREATE | O_EXCL:如信号量已存在,则返回error
③mode:信号量访问权限,如0666
④value:信号量初始化值
int sem_wait(sem_t *sem)
测试指定的信号量的值,相当于P操作
若sem > 0,则减1立刻返回;
若sem = 0,则睡眠直到sem > 0,此时立刻减1,然后返回
int sem_post(sem_t *sem)
释放资源,相当于V操作,信号量sem的值加1,唤醒正在等待该信号量的进程/线程
int sem_close(sem_t *sem)
关闭有名信号量
进程中,如果使用完信号量,应使用该函数关闭有名信号量
int sem_unlink(const char *name)
删除系统中的信号量
(2)利用信号量实现同步互斥
操作系统Ubuntu(实验三四)相关推荐
- 操作系统leb1实验报告
实验名称:实验1:bash脚本编程 实验目的 1.熟悉Linux系统下bash编程 2.利用bash编程完成简易功能 实验内容 编写一个脚本文件checkuser,该脚本运行时带一个用户名作为参数,具 ...
- 哈工大操作系统课程实验记录
哈工大操作系统课程实验记录 0-课程准备 课程视频地址: https://www.bilibili.com/video/BV1d4411v7u7 实验楼地址: https://www.shiyanlo ...
- 操作系统ucore实验——lab1
** ## 操作系统ucore实验--lab1 ** 紧急更新实验用的源代码在lab0中的有误改为: 链接:https://pan.baidu.com/s/1RLCG57xDSydH8oQD-JwgP ...
- 《操作系统》实验报告——熟悉Linux基础命令及进程管理
理论知识 Linux--进程管理 Linux--Linux C语言编程基础知识 手把手教你安装Linux虚拟机 一.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执 ...
- 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc
操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...
- ubuntu+touch+android,移动操作系统Ubuntu Touch支持安卓应用
原标题:移动操作系统Ubuntu Touch支持安卓应用 [ ] [IT168 资讯]不知道大家是否还记得魅族和Ubuntu合作的Ubuntu Touch移动操作系统,自从Canonical宣布放弃U ...
- 计算机操作系统指导书,《计算机操作系统》实验指导书-2015
q.num++; System.out.println(\已生产第:\个产品!\ try { Thread.currentThread().sleep(100); } catch (Interrupt ...
- 操作系统期末实验:多用户二级文件系统
多用户二级文件系统 写在最前面 问题描述 要 求: 1 功能设计 1.1 系统层次结构 1.2初始化 1.2 子功能设计 2 源程序 2.1 系统实现主要的软件技术 2.2 数据结构 2.3 后端 2 ...
- ZUCC_操作系统原理实验_Lab9进程的通信消息队列
lab9进程的通信–消息队列 一.两个进程并发执行,通过消息队列,分别进行消息的发送和接收 1.代码: //接受消息 #include<stdio.h> #include<stdli ...
最新文章
- AnimeGANv2 实现动漫风格迁移,简单操作
- MongoDB Windows环境安装及配置
- 深入浅出多线程系列之四:简单的同步 lock
- 设计模式中的开闭原则
- mysql数据库开发规范_开发规范——MYSQL数据库
- mysql的库和表相关操作
- java 本地发送邮件_java在本地发送邮件可以,在服务器发送报错
- MyBatis 插件原理与自定义插件-插件编写与注册
- mac java版本 不一致_mac实现不同版本的jdk切换
- python有关时间的函数time和datatime
- selenium 服务器端运行命令
- 微信支付java后台
- c语言 库仑计_android电池(四):电池 电量计(MAX17040)驱动分析篇
- matpolitlib 画图
- Struts2的学习笔记1配置运行环境运行第一个例子Hello word!
- 算法案例分析—字符串模式匹配算法
- bypass-wts-waf
- POS收银系统报EFI Shell version 2.00错误
- 初探iOS项目使用MVP模式
- 强化学习--蒙特卡洛法