下面读、写不能运行
信号量集中的信号量好像设置有错,我不知道对不对。
哪位帮忙改一下。
#include<stdio.h>
#include<sys/sem.h>
#include<sys/ipc.h>
#include<sys/types.h>
#include <unistd.h>
#include <pthread.h>
#include<stdlib.h>
int semid;
struct  sembuf sb[4];
int readcount = 0;
int i = 5;
void read1 ();
void write1 ();
int main()
{
unsigned short array[2] = {1,1}; semid = semget(0x1234, 2, 0666|IPC_CREAT);//创建信号量集
if(semctl(semid, 0, SETALL, array) == -1)
printf("sdf \n"); 

   sb[0].sem_num = 0;
    sb[0].sem_op = 1;
sb[1].sem_num = 0;
sb[1].sem_op = -1;
    
    sb[2].sem_num = 1;
    sb[2].sem_op = 1;
    sb[3].sem_num = 1;
    sb[3].sem_op = -1;
    
    int ret1 =5;
    int ret2 =-12;
ret1 = semctl(semid,0,GETVAL);
ret2 = semctl(semid,1,GETVAL);
printf("val:%d\n",ret1);
printf("va2:%d\n",ret2);   for(i=0;i<5;i++)
    {
        if(fork()==0)//创建子进程,
        {
         //printf("%d\n",i);
         write1();
        
            exit(0);//子进程结束
        }
        if(fork()==0)//创建子进程,
        {
        
            read1();
            
            exit(0);//子进程结束
        }
    } return 0;
}void read1 ()
{
semop(semid, &sb[1], 1);//p0
readcount++;
if(1 == readcount)
semop(semid, &sb[3], 1);//p1
semop(semid, &sb[0], 1);//v0
printf("正在读\n");
//sleep(2);//读
printf("读完\n");
semop(semid, &sb[1], 1);//p0
readcount--;
if(0 == readcount)
semop(semid, &sb[2], 1);//v1
semop(semid, &sb[0], 1);//v0
}void write1 ()
{
semop(semid, &sb[3], 1);
printf("正在写\n");
//sleep(3);//写
printf("写完\n");
semop(semid, &sb[2], 1);
}