首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

信号量与多进程的有关问题

2012-07-29 
信号量与多进程的问题如下程序:交谈中请勿轻信汇款、中奖信息、陌生电话,勿使用外挂软件。10:31:09成功发送文

信号量与多进程的问题
如下程序:

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

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

热点排行