当前位置: 代码迷 >> 驱动开发 >> 有码有码!信号量集里靠哪一个信号阻塞呢?解决方法
  详细解决方案

有码有码!信号量集里靠哪一个信号阻塞呢?解决方法

热度:207   发布时间:2016-04-28 11:22:20.0
有码有码!!!信号量集里靠哪一个信号阻塞呢?
二话不说,linux下,有码如下……

C/C++ code
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/sem.h>int main(){    /*生成key*/    key_t key = ftok(".", 100);    /*创建共享内存段*/    int shmid = shmget(key, 12, IPC_CREAT|IPC_EXCL|0600);    if(shmid<0)perror("create"),exit(-1);    /*挂接共享内存段*/    void* p = shmat(shmid, NULL, 0);    if(p==(void*)-1)perror("at"),exit(-1);    /*使用共享内存段进行通信*/    int semid = semget(key, 2, IPC_CREAT|IPC_EXCL|0600);    if(semid<0)printf("%m\n"),exit(-1);    semctl(semid, 0, SETVAL, 0);    semctl(semid, 1, SETVAL, 1);    struct sembuf op[2];    op[0].sem_num = 0;    op[0].sem_op = 1;    op[0].sem_flg = 0;    op[1].sem_num = 1;    op[1].sem_op = -1;    op[1].sem_flg = 0;    int* f = p;    int i;    for(i=100; i<=120; i++){        semop(semid, op, 2);      //[b][color=#FF0000]此处不明白,请教各位大侠[/color][/b]        *f = i;        sleep(1);    }    /*脱接共享内存段*/    if(shmdt(p)<0)perror("dt"),exit(-1);    /*删除共享内存段*/    if(shmctl(shmid,IPC_RMID,NULL)<0)perror("RMID"),exit(-1);}


semop(semid, op, 2); 这一句我不明白,semid这个信号集中有两个信号,在这个地方希望发生阻塞,那到底以哪个信号的sem_op 为标准去判断该不该阻塞呢???

信号量这个概念我了解,但是一到信号量集这里我就卡住了,希望大侠指导一下!

------解决方案--------------------
建议LZ看一下关于进程通讯的基础知识。
------解决方案--------------------
不是很了解 帮顶
  相关解决方案