Chinaunix

标题: 请高手帮忙看看 [打印本页]

作者: huxk    时间: 2009-09-05 15:13
标题: 请高手帮忙看看
最近碰到一个程序,基本框架如下

shmget();

shmat();//assign "0" to it


socket();

bind();

listenfd = listen();

for ( ; ; )
{
    sockaccepted = accept();
    
    sockconnected = connect_to_thirdparty();
    
    if ( (ret = fork()) == 0)
    {
        close(listenfd);
        rcvproc(sockconnected,sockaccepted);
        exit(0);
    }
    else if(ret >0)
    {
        close(sockaccepted);
        close(sockconnected);
    }
    else
    {
        exit(0);
    }
    
    if ( (ret = fork()) == 0)
    {
        close(listenfd);
        rcvproc(sockconnected,sockaccepted);
        exit(0);
    }
&nbsp;&nbsp;&nbsp;&nbsp;else if(ret < 0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);
&nbsp;&nbsp;&nbsp;&nbsp;}
}


int rcvproc()
{
&nbsp;&nbsp;&nbsp;&nbsp;for ( ; ; )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read(sockaccepted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(sockconnected);
&nbsp;&nbsp;&nbsp;&nbsp;}
}



int sndproc()
{
&nbsp;&nbsp;&nbsp;&nbsp;for ( ; ; )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shmat();//这里连接父进程建立的共享内存并判断其内容是否为 "0"如果不是则循环判断直到其值为 "0"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 共享内存如果值 为 "0" 重新赋值为 "1"

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read(sockconnected);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(sockaccepted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//共享内存重新赋值为 "0"

&nbsp;&nbsp;&nbsp;&nbsp;}
}


我想问的是,sndproc函数中使用共享内存其实充当锁的作用,但这有必要么?
作者: huxk    时间: 2009-09-05 15:22
搞错了一个地方,第二个子进程执行的是sndproc
作者: huxk    时间: 2009-09-06 23:28
怎么高手都不露面呢




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2