【Linux信号通讯编程】信号量同步
来源:互联网 发布:面向对象数据库 编辑:程序博客网 时间:2024/05/16 11:41
一、进程同步
一组并发进程,他们之间需要一定的执行顺序,这时需要一个先执行,另一个等待执行。
这组并发的进程按照一定的顺序执行的过程称为进程间的同步。
二、经典的生产者与消费者问题
1、生产产品
product.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>#include <sys/stat.h>#include <fcntl.h>void main(){int fd = 0;key_t key = 0;int semid = 0;struct sembuf sops;/* 创建并打开信号量集合. */key = ftok("/home", 2);semid = semget(key, 1, IPC_CREAT);/* 设置信号量初始值,让消费者等待. */semctl(semid, 0, SETVAL, 0);/* ----------------------------------------------------- */fd = open("./product.txt", O_RDWR | O_CREAT, 0755);sleep(8);write(fd, "I love ", 7);sleep(8);write(fd, "you. ", 5);close(fd);/* ----------------------------------------------------- *//* 释放信号量. */sops.sem_num = 0;sops.sem_op = 1;sops.sem_flg = SEM_UNDO;semop(semid, &sops, 1);}
2、复制产品:system("命令")
customer.c#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/sem.h>#include <sys/ipc.h>void main(){key_t key = 0;int semid = 0;struct sembuf sops;int ret;key = ftok("/home", 2);semid = semget(key, 1, IPC_CREAT);/* 获取信号量. */sops.sem_num = 0;sops.sem_op = -1; //当生产者处于生产状态时, 消费者必须等到sops.sem_flg = SEM_UNDO;ret = semop(semid, &sops, 1);if (ret < 0)puts("Process error !");system("cp ./product.txt ./dir"); //对产品的操作, 输入命令直接执行}
* 执行结果:
* 生产者(product)执行完成后, 消费者(customer)来复制产品.(无论谁先运行, 最后customer都要等待product生产完成才能执行system命令搬移产品)
*
0 0
- 【Linux信号通讯编程】信号量同步
- 【Linux信号通讯编程】信号量互斥编程
- Linux信号通讯编程
- Linux信号通讯编程
- 【Linux】信号通讯编程
- Linux 信号量同步编程
- linux应用编程--信号通讯(上)
- Linux高级编程复习 第十二章 多线程概念_互斥锁--_多线程同步_信号_条件量_信号量
- 信号量通讯编程
- 【Linux】 多线程编程(信号量实现同步)
- Linux多线程编程入门-同步机制-信号量
- linux系统编程:线程同步-信号量(semaphore)
- 信号通讯编程
- 信号量--进程同步编程
- 信号量同步编程
- 信号量同步编程
- 信号量同步编程
- Linux多线程编程之同步对象编程:线程信号量
- numpy函数:tile函数用法
- 伪符号及条件断点的使用
- 405. Convert a Number to Hexadecimal
- 【LeetCode】6. ZigZag Conversion
- 006——Java层Binder框架通信原理
- 【Linux信号通讯编程】信号量同步
- windows上storm集群的配置
- 【bzoj 1090】[SCOI2003]字符串折叠 区间dp
- Android练习-----进度条(ProgressBar)
- Duplicate Symbol链接错的原因总结和解决方法
- 程序员的好书好文章(个人记录)
- poj1979
- 创业那点事儿
- Windows路径操作API