当前位置:  技术问答>linux和unix

请问在子进程中变量如何与父进程同步(100)

    来源: 互联网  发布时间:2015-09-17

    本文导语:  在Socket编程当中,我用Accept等待客户端连接, 如果有联接的话,我会fork()出一个新的进程 我在子进程用到父进程的一个变量,每次加1 但是当我处理完这个子进程之后,父进程的变量却还是0 我如何才能使这个变量...

在Socket编程当中,我用Accept等待客户端连接,
如果有联接的话,我会fork()出一个新的进程
我在子进程用到父进程的一个变量,每次加1
但是当我处理完这个子进程之后,父进程的变量却还是0

我如何才能使这个变量和子进程中的值保持同步

|
父子进程中无论哪个想修改(fork后的第一次)变量,那么系统就会分配新的内存页框给那个进程,拷贝原来的页框内容,然后新页框的内容不修改!所以子进程修改的变量放在新页框力,和父进程是不同地址的。
不过觉得使用通信的方法进行同步有时候不是很灵活,所以还是使用共享的线程好!

|
办法有很多,比如pipe,管道,共享内存,unix socket等
其实最简单的还是不要fork进程,采用pthread就可以了,但要注意同步问题,使用线程锁

|
给你一个在共享内存使用的例子
比如 整数i放在共享内存中
#include 
#include 
#include 

int *i;
int shmid;

shmid = shmget(IPC_PRIVATE, sizeof(int), (SHM_R | SHM_W));
i = shmat(shmid,0,0);   
..........

shmctl(shmid,IPC_RMID,0);   //回收该区域

|
UPCC(杂食动物) 言之有理,用户空间的fork 是写时复制的,当要修改数据区时,于是为新fork的子进程分配内存的,所以你修改的变量其实只是子进程中的变量而已,改用THREAD 呀

|
哈哈,跟我今天碰到的问题一样。我本来也想问这个问题。
现在想明白了,父进程和子进程在不同的内存空间,对于一个变量会存储两次。所有要让他们的变量互相使用,只能采用进程间通信,或者线程并行执行。

|
父子进程中无论哪个想修改(fork后的第一次)变量,那么系统就会分配新的内存页框给那个进程,拷贝原来的页框内容,然后新页框的内容被修改!所以子进程修改的变量放在新页框力,和父进程改变量是存放在不同地址的。
不过觉得使用通信的方法进行同步有时候不是很灵活,所以还是使用共享的线程好!

|
该变量应该放在共享存储区中,子进程与父进程的存储区域不同,子进程的变量改变当然不会影响父进程. 建议在一块共享存储区中放置该变量,就可以保证变量同步

    
 
 

您可能感兴趣的文章:

  • 如果一个server进程要fork许多子进程,但不等待子进程终止,也不希望子进程结束后处于僵进程状态直到父进程终止。请问可采用什么方法实现
  • 一个进程首先监听一个端口,等到有连接了就新开一个进程,让新进程来处理后面的通讯。请问母进程中已经打开了端口,子进程怎么来使用同一
  • 请问:子进程的数据可以传给父进程吗????
  • 父进程等待子进程n秒,如果子进程正常退出,父进程立即继续向下执行,如果子出现进程故障一直不退出,父进程等待n秒后继续向下执行,请问
  • 请问:如果知道一个进程的pid 怎么得到他父进程的pid
  • 请问: 在要想删掉进程名为"xxx"的进程,在shell脚本中该写什么啊?
  • 请问已知进程的PID,通过什么函数可以得到进程的名字?
  • 请问fork子进程后,怎么修改子进程的所属用户。
  • 请问linux进程的哪些信息保存在内核里?哪些信息又保存在进程空间里?谢谢
  • 请问知道进程标识,能够结束该进程并回收所有资源么?
  • 请问父进程如何获得子进程的子进程的pid号?
  • help help busy!!! 请问如何让一个进程进入dead状态或者编程实现让一个进程进入dead状态
  • a 请问怎样查看服务器上的telnet进程,及远程telnet进程的ip
  • 请问子进程应该怎么调试。
  • 请问有关进程间通信的问题
  • 请问:linux下的子进程与线程的区别
  • 请问在 linux 下如何使用 execl() 调用另一个多进程的程序?
  • 请问前辈,线程和进程有什么区别啊?
  • 请问如何将某个进程设为系统服务?
  • 请问统计当前进程数应该使用什麽命令?
  • 请问在win2000的环境变量中,administrator的用户变量与系统变量有什么区别??
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问:环境变量的值 一般前面加$就可以了,但有时又用{}将环境变量括起来,它们有什么区别啊?
  • 请问怎样设置PATH环境变量?
  • 请问如何在shell脚本中检测一个环境变量是否已经设置
  • 请问:make 嵌套调用,变量如何向下传递 3 级?
  • 请问使用crontab是否必须设置环境变量?
  • 请问初试加载环境变量的文件除了/etc/profile还有哪个
  • 请问一个关于shell变量的简单问题
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • 请问如何在C语言中获得shell 变量
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • vi+cscope请问如何同步CS的索引数据库
  • 请问STLPort的线程安全是指不用任何同步机制么
  • 请问pthread_mutex_lock()和pthread_mutex_unlock()可不可以用于对不同进程的线程进行同步。
  • 请问在单进程,多线程程序里,线程间使用IPC的信号量来同步,能行吗?
  • 在linux下,用共享内存来实现进程间的数据交互,请问如何实现同步?(这些进程没有父子关系)
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待
  • 请问如何在一台单机上装VMware的网络访问问题?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3