信号量与多进程的问题
如下程序:
交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。
10:31:09
成功发送文件“新建文本文档.txt”(4.00KB)
打开文件 打开所在文件夹
仔 10:45:13
redefinition of 'struct ipc_perm'
15:23:53
成功接收文件“TestMain.cpp”(5.00KB)
打开文件 打开所在文件夹
仔 16:28:46
/*初始化信号量 */
sem_init(&emptyid,1,MAXSHM);
sem_init(&fullid,1,0);
sem_init(&mutex,1,1);
/* 生产者进程 */
if(fork()==0)
{
int i=0;
int set=0;
while(i<5)
{
sem_wait(&emptyid);
sem_wait(&mutex);
array[set%MAXSHM]=i+1;
cout<<"Producer put number " <<array[set%MAXSHM] <<" to No" <<set%MAXSHM <<endl;
set++;//写计数加1
sem_post(&fullid);
sem_post(&mutex);
i++;
}
sleep(3);//SLEEP 3秒,等待消费者进程执行完
cout<<"Poducer if over\n"<<endl;
exit(0);
}
else
{
/* 消费者A进程 */
if(fork()==0)
{
while(1)
{
if(*get==5)
break;
int i =0;
sem_getvalue(&fullid,&i);
sem_wait(&fullid);
sem_wait(&mutex);
cout<<"The ConsumerA get number from No."<<(*get)%MAXSHM<<endl;
(*get)++; //读计数加1
sem_post(&emptyid);
sem_post(&mutex);
sleep(1);
}
cout<<"ConsunerA is over\n"<<endl;
exit(0);
}
输出如下:
Producer put number 1 to No0
Producer put number 2 to No1
Producer put number 3 to No2
Producer put number 4 to No3
Producer put number 5 to No4
fullid num=0
tencent:~/gprTmp # Poducer if over
请问一下,为什么fullid的值没有变化,还是0呢
[解决办法]
代码不完整,也只能猜猜了
可能是你的fork的问题,
fork出来的子进程复制父进程的数据等,所在子进程中改变了变量在父进程中不会变
比如你定义一个变量a=0,如果fork,则父子进程都有一个变量a,如果在父进程中a=5;则父进程中变量变了,但子进程中变量a不会改变,还是0