a同学写完“数学课”后出去接电话,b同学进来写了“英语课考试”,a同学后来又进来,写了“取消”,从而导致其他的同学看了产生歧义。
student1.c
#include <fcntl.h>
#include<unistd.h>
void main(){
int fd = 0;
fd = open("./board.txt",O_RDWR|O_APPEND);
/*写入 “数学课” */
write(fd,"class math ",11);
sleep(10);
/* 写入“取消” */
close(fd);
}
~
~
~
~
~
student2.c
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
void main(){
int fd = 0;
fd = open("./board.txt",O_RDWR|O_APPEND);
/* 写入"英语课考试" */
write(fd,"enlish exam ",20);
close(fd);
}
~
~
运行结果:
叙述一下:a进程 想操作文件前,先看 “标志” 是否为1,如果为1,则可以操作文件,如果 “标志” 为0,则等待…
这个标志 其实就是 信号量
信号量的实质:就是一个数字
图示中:获取 就是 减法 操作,释放就是加法操作
比如数值的初始值为2则为 计数信号量