实验三四

  • 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(实验三四)相关推荐

  1. 操作系统leb1实验报告

    实验名称:实验1:bash脚本编程 实验目的 1.熟悉Linux系统下bash编程 2.利用bash编程完成简易功能 实验内容 编写一个脚本文件checkuser,该脚本运行时带一个用户名作为参数,具 ...

  2. 哈工大操作系统课程实验记录

    哈工大操作系统课程实验记录 0-课程准备 课程视频地址: https://www.bilibili.com/video/BV1d4411v7u7 实验楼地址: https://www.shiyanlo ...

  3. 操作系统ucore实验——lab1

    ** ## 操作系统ucore实验--lab1 ** 紧急更新实验用的源代码在lab0中的有误改为: 链接:https://pan.baidu.com/s/1RLCG57xDSydH8oQD-JwgP ...

  4. 《操作系统》实验报告——熟悉Linux基础命令及进程管理

    理论知识 Linux--进程管理 Linux--Linux C语言编程基础知识 手把手教你安装Linux虚拟机 一.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执 ...

  5. 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc

    操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...

  6. ubuntu+touch+android,移动操作系统Ubuntu Touch支持安卓应用

    原标题:移动操作系统Ubuntu Touch支持安卓应用 [ ] [IT168 资讯]不知道大家是否还记得魅族和Ubuntu合作的Ubuntu Touch移动操作系统,自从Canonical宣布放弃U ...

  7. 计算机操作系统指导书,《计算机操作系统》实验指导书-2015

    q.num++; System.out.println(\已生产第:\个产品!\ try { Thread.currentThread().sleep(100); } catch (Interrupt ...

  8. 操作系统期末实验:多用户二级文件系统

    多用户二级文件系统 写在最前面 问题描述 要 求: 1 功能设计 1.1 系统层次结构 1.2初始化 1.2 子功能设计 2 源程序 2.1 系统实现主要的软件技术 2.2 数据结构 2.3 后端 2 ...

  9. ZUCC_操作系统原理实验_Lab9进程的通信消息队列

    lab9进程的通信–消息队列 一.两个进程并发执行,通过消息队列,分别进行消息的发送和接收 1.代码: //接受消息 #include<stdio.h> #include<stdli ...

最新文章

  1. AnimeGANv2 实现动漫风格迁移,简单操作
  2. MongoDB Windows环境安装及配置
  3. 深入浅出多线程系列之四:简单的同步 lock
  4. 设计模式中的开闭原则
  5. mysql数据库开发规范_开发规范——MYSQL数据库
  6. mysql的库和表相关操作
  7. java 本地发送邮件_java在本地发送邮件可以,在服务器发送报错
  8. MyBatis 插件原理与自定义插件-插件编写与注册
  9. mac java版本 不一致_mac实现不同版本的jdk切换
  10. python有关时间的函数time和datatime
  11. selenium 服务器端运行命令
  12. 微信支付java后台
  13. c语言 库仑计_android电池(四):电池 电量计(MAX17040)驱动分析篇
  14. matpolitlib 画图
  15. Struts2的学习笔记1配置运行环境运行第一个例子Hello word!
  16. 算法案例分析—字符串模式匹配算法
  17. bypass-wts-waf
  18. POS收银系统报EFI Shell version 2.00错误
  19. 初探iOS项目使用MVP模式
  20. 强化学习--蒙特卡洛法

热门文章

  1. webpack4打包工具
  2. python生成器与迭代器。
  3. MyBatis-进阶2
  4. 使用python 对图片进行水印,保护自己写的文章
  5. libcstl中的list没法插入自定义数据
  6. Qt4小技巧——QTextEdit自动滚屏
  7. 自学html和css,学习HTML和CSS的5大理由
  8. python调用接口获取文件_python接口文件使用说明
  9. Linux机器件拷贝文件
  10. .net 导出excel_Qt编写的项目作品18-数据导出到Excel及Pdf和打印数据