信号量与多进程的问题

gongpengrong 2012-01-19 04:28:28
如下程序:

交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。

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呢
...全文
122 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qixing1115 2012-01-19
  • 打赏
  • 举报
回复
代码不完整,也只能猜猜了
可能是你的fork的问题,
fork出来的子进程复制父进程的数据等,所在子进程中改变了变量在父进程中不会变
比如你定义一个变量a=0,如果fork,则父子进程都有一个变量a,如果在父进程中a=5;则父进程中变量变了,但子进程中变量a不会改变,还是0

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧