互斥
#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