免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3663 | 回复: 12
打印 上一主题 下一主题

如何限制同一时刻的fork的最大数量?一定要用共享内存吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-19 11:48 |只看该作者 |倒序浏览

  1. ...
  2.    for ( ; ; ) {
  3.        if( fknbr>;3 ){
  4.            printf("Busy now! fknbr:[%d]\n",fknbr);
  5.            sleep(5);
  6.            break;
  7.        }
  8.        if( fork() == 0 ){
  9.            fknbr++;
  10.            printf("Process fknbr:[%d]\n",fknbr);
  11.            sleep(3);
  12.            fknbr--;
  13.            exit (0);
  14.        }
  15.    }
  16. ...
复制代码


这样写是不对的,fknbr到子进程以后就独立了,无法影响从父进程中继承的值了!
请问除了用共享内存还有其他办法吗?(共享内存不太会写)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-05-19 12:07 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?


让父进程来维护一个计数器应该能满足fork的最大数量的限制。算法是:
假设计数器初始为0,每次fork成功在父进程返回后让该计数器++,在下次fork前,检查该计数器的值是否超过你规定的最大数量。如果超过,不作fork,复进程等待;如果不超过,继续fork。同时处理在这个过程中可能出现的任何异常和错误。

论坛徽章:
0
3 [报告]
发表于 2003-05-19 13:22 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

为什么要用计数器,用共享锁不是一样的,把锁当成信号来使用就行!这样可能会好一点!

论坛徽章:
0
4 [报告]
发表于 2003-05-19 13:46 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

原帖由 "蓝色键盘" 发表:
如何限制同一时刻的fork的最大数量?一定要用共享内存吗?


让父进程来维护一个计数器应该能满足fork的最大数量的限制。算法是:
假设计数器初始为0,每次fork成功在父进程返回后让该计数器++,在下次fork前,检?.........


谢谢!
如我上面写的程序,我可以把fknbr++和fknbr--移到子进程外面来处理!
这样一来,如果没有进入子进程,那么处理是对的!
但是,如果进入了子进程后,fknbr--怎么处理呢?
谢谢了!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-05-19 15:01 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

但是,如果进入了子进程后,fknbr--怎么处理呢?

fork后子进程保留了父进程的copy,这样处理要使用shm等进程间通讯的机制了。具体例子参看ipc samples

论坛徽章:
0
6 [报告]
发表于 2003-05-19 15:12 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

原帖由 "蓝色键盘" 发表:
但是,如果进入了子进程后,fknbr--怎么处理呢?

fork后子进程保留了父进程的copy,这样处理要使用shm等进程间通讯的机制了。具体例子参看ipc samples


谢谢!
看来还是逃不了要用共享内存啊!
唉...还是老老实实去看喽!

论坛徽章:
0
7 [报告]
发表于 2003-05-19 20:10 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

根本不用这么麻烦。用信号量很简单就解决了。
我曾经编写过一个同时开50个进程筛质数的程序,就是用信号量互斥的,很简单。

论坛徽章:
0
8 [报告]
发表于 2003-05-19 20:22 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

信号量初始时是50
每fork一个进程前使用调用wait

应该可以了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-05-20 13:42 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

是的,楼主可以考虑用信号量,互斥锁

论坛徽章:
0
10 [报告]
发表于 2003-05-20 13:56 |只看该作者

如何限制同一时刻的fork的最大数量?一定要用共享内存吗?

谢谢大家的热心回答!
共享内存和信号量,我都不熟悉啊!
有没有类似的代码?
我太菜了,精华区的IPC的例子也不是一时半会儿能看明白的啊!
我继续看了,再次谢谢大家!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP