互斥
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semop(int semid, struct sembuf *sops, unsigned nsops);
//参数一:信号量集的id
//参数二:一个结构体数组的首地址
//参数三:结构体数组的大小
//这个结构体如下:
struct sembuf {
unsigned short sem_num; /* 第几个信号量 */
short sem_op; /* +1或者-1代表PV操作 */
short sem_flg; /* 标志位一般填0*/
}
模拟实现父子进程同时打印,父子进程在分别在一次循环里印两次X/O
如果不加互斥,那么结果应该是XOXOOXOXOXO类似这样XO无序出现。
用信号量实现互斥后,打印结果应该类似于XXOOXXOOOOXX这样,即X或者O必须连续出现两次。
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>
void handler(int s) {
wait(NULL);
}
//创建信号量
int sem_create(key_t key) {
return semget(key, 1, IPC_CREAT|0644)<

本文介绍了如何在Linux中利用PV操作模拟互斥,确保父子进程在打印字符时实现顺序控制。通过示例展示了不加互斥时XO无序出现,而使用信号量后,X或O会连续出现两次,达到互斥效果。
最低0.47元/天 解锁文章
1544

被折叠的 条评论
为什么被折叠?



