信号量进程同步,王明学learn
信号量进程同步
一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。
信号量在进程同步时初始值为:0
信号量在进程互斥时初始值为:大于0的
本章节主要使用信号量,使的两个进程生产到消费有序的完成。就是说必须等到生产完全完场才能,让消费执行。
下面进入编程语言编程学习:
1.首先创建文件product.c文件------>vim product.c
编写代码如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> #include <sys/ipc.h>
#include <sys/sem.h> void main()
{
int fd;
key_t key;
int semid;
struct sembuf sops;
key = ftok("/root",); //创建键值 //创建信号量集合
semid = semget(key, , IPC_CREAT);
semctl(semid,,SETVAL,); //设置信号量的值为0
/*****************生产者创建文件**************************/
//1.创建产品~文件
fd = open("./product.txt",O_RDWR|O_CREAT,); //2.休息
sleep(); //向产品文件填入内容
write(fd,"the product is finished!",);
close(fd); //释放信号量
sops.sem_num = ;
sops.sem_op = ;
sops.sem_flg = SEM_UNDO;
semop(semid,&sops, );
}
使用linux中的编译器编译,gcc product.c -o product
2.接下来创建customer.c------------->vim customer.c
编辑文件为:
#include <stdlib.h> #include <sys/ipc.h>
#include <sys/sem.h>
void main()
{
key_t key;
int semid;
struct sembuf sops; key = ftok("/root",); //创建键值 //打开信号量集合
semid = semget(key, , IPC_CREAT); //获取信号量
sops.sem_num = ;
sops.sem_op = -;
sops.sem_flg = SEM_UNDO;
semop(semid,&sops, ); system("cp ./product.txt ./ship/");
}
同样对customer.c进行编译------->gcc customer.c -o customer
2.下面进入代码运行
1).运行product------->./product
2).运行customer------->./customer
可以看到当product为执行完成时customer进程移植处于等待状态,知道product运行结束,customer进程才紧接着完成。当然也可以看到之前已经创建的ship文件下面有一个product.txt文件,而且里面已经有the product is finished!这句话。
信号量进程同步,王明学learn的更多相关文章
- 信号量互斥,王明学learn
信号量互斥 信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥).进程可以根据它判定是否能够访问某些共享资源.除了用于访问控制外,还可用于进程同步. 一.信号量分类 ...
- 管道通信,王明学learn
管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4. ...
- 进程控制理论,王明学learn
进程控制理论 一.进程 进程是一个具有一定独立功能程序的一次运行活动. 1.1进程特点 1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的 2.并发性:任何进程都可以同其他进程一起 ...
- linux内核的组成,王明学learn
linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备 ...
- linux设备驱动概述,王明学learn
linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...
- 消息队列通信,王明学learn
消息队列通信 消息队列就是一个消息(一个结构)的链表.而一条消息则可看作一个记录,具有特定的格式.进程可以从中按照一定的规则添加新消息:另一些进程则可以从消息队列中读走消息. 每一个消息都是一个结构体 ...
- 共享内存同行,王明学learn
共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...
- 信号通讯编程,王明学learn
信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...
- 多进程程序设计,王明学learn
多进程程序设计 一.函数学习 1.1 创建进程fork 1.1.1 函数原形 pid_t fork(void); 1.1.2 函数功能 创建一个子进程 1.1.3 所属头文件 <unistd.h ...
随机推荐
- php 通过API接口连接12306余票查询
<?php header("content-type:text/html;charset='utf-8'"); //设置编码 echo "<meta cont ...
- 【GoLang】GoLang 错误处理 -- 异常处理思路示例
代码: package main import ( "fmt" // "testing" ) var Pkg = "packageName" ...
- SQL Server数据库主键与索引的几点区别
我们在使用SQL Server数据库的时候常常会创建主键和索引,那么主键和索引到底有什么样的不同呢?本文我们主要介绍了主键和索引的区别. 主键和索引的区别如下: 主键是索引,但索引不一定是主键. 主键 ...
- Debian安装python-rrdtool
... sudo apt-get install rrdtool sudo apt-get install librrd-dev sudo apt-get install python-dev pip ...
- cf592d
题意:给出一个无根树,点数为10^5,所有边的长度为1.给定其中有一些点是受到攻击的. 现在要求一个人选定一个点作为起点,走遍所有的受攻击点(不用再回到起点). 需要的最短距离是多少,选定的起点是哪个 ...
- UIScrollView 的 delaysContentTouches
UIScrollView 的一段说明: Because a scroll view has no scroll bars, it must know whether a touch signals a ...
- Android Broadcast 和 iOS Notification
感觉以上2个机能有许多相似之处,作个记录,待研究!
- rman
http://wenku.baidu.com/link?url=UGVBgYKaKoT7_KI-jpj3BG0XF_7_kpZBZLoXD-9uTQkpw-brlacrkVNcfkHEXuax4ahc ...
- Innodb 表空间卸载、迁移、装载
从MySQL的Innodb特性中我们知道,Inndob的表空间有共享和独享的特点,如果是共享的.则默认会把表空间存放在一个文件中(ibdata1),当开启独享表空间参数Innodb_file_per_ ...
- Python 生产环境MySQL数据库增量备份脚本
MySQL数据库常用的办法是通过MySQLdump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题.前面写了一遍文章介绍xtrabackup的热备工具,见 http://w ...