信号量同步编程

来源:互联网 发布:淘宝运营每天做什么 编辑:程序博客网 时间:2024/06/05 11:48
利用信号量不仅可以是两个进程对一个文件访问互斥,还可以对进程进行同步。
这里虽然说是同步,但我觉得更像是让进程按照一定的顺序访问一个文件,即给进程排个序来操作文件

#include
#include
#include
#include
#include
#include
#include

void main()
{
    int fd;
    int semid;
    struct sembufsops;
    key_t key;
    
    key =ftok("/home/kaito/mark_c/same_file", 2);
    
    //创建信号量
    semid = semget(key, 1,IPC_CREAT);
    semctl(semid, 0, SETVAL,0);
    
    //创建文件(产品)
    fd =open("/home/kaito/mark_c/same_file/product.txt", O_RDWR|O_CREAT,0775);
    
    //休息
    sleep(10);
    
    //向文件里面填充内容
    write(fd, "the productis finished!", 25);
    
    //释放信号量
    sops.sem_num = 0;
    sops.sem_op = 1;
    sops.sem_flg =SEM_UNDO;
    semop(semid, &sops,1);
    
    close(fd);
}



#include
#include
#include
#include
#include

void main()
{
    int fd;
    int semid;
    struct sembufsops;
    key_t key;
    int ret;
    
    //创建信号量
    key =ftok("/home/kaito/mark_c/same_file", 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);
    printf("ret is %d\n",ret);
    
    //取走文件
    system("cp ./product.txt./ship/");
}
原创粉丝点击