#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); //此处不明白,请教各位大侠
*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 为标准去判断该不该阻塞呢???
信号量这个概念我了解,但是一到信号量集这里我就卡住了,希望大侠指导一下!
8 个解决方案
#1
建议LZ看一下关于进程通讯的基础知识。
#2
你好,我是因为看那些教材没看懂才来问的。
教材上举的例子都是信号量集中只有一个信号的例子,很少有多个信号量的情况,不信你去瞧瞧
#3
不是很了解 帮顶
#4
NONBLOCK
#5
唉,这里人气没有其他版块旺啊,我自己顶一下
#6
顶一下
#7
semop(semid, op, 2);
希望有高手能帮我定量的分析一下程序运行过程中的这一句,如何起到了阻塞的作用的
希望有高手能帮我定量的分析一下程序运行过程中的这一句,如何起到了阻塞的作用的
#8
算了,结贴。 人气太低了
#1
建议LZ看一下关于进程通讯的基础知识。
#2
你好,我是因为看那些教材没看懂才来问的。
教材上举的例子都是信号量集中只有一个信号的例子,很少有多个信号量的情况,不信你去瞧瞧
#3
不是很了解 帮顶
#4
NONBLOCK
#5
唉,这里人气没有其他版块旺啊,我自己顶一下
#6
顶一下
#7
semop(semid, op, 2);
希望有高手能帮我定量的分析一下程序运行过程中的这一句,如何起到了阻塞的作用的
希望有高手能帮我定量的分析一下程序运行过程中的这一句,如何起到了阻塞的作用的
#8
算了,结贴。 人气太低了