下面讀、寫不能運行
信號量集中的信號量好像設定有錯,我不知道對不對。
哪位幫忙改一下。
#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);
}
uj5u.com熱心網友回復:
semctl(semid, 0, SETALL, array)的引數array有問題,array是你要設定的信號量0的初始值嗎轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/93247.html
標籤:內核源代碼研究區
上一篇:Bitlocker加密
下一篇:安裝red hat
