- 论坛徽章:
- 0
|
最近碰到一个程序,基本框架如下
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);
}
else if(ret < 0)
{
exit(0);
}
}
int rcvproc()
{
for ( ; ; )
{
read(sockaccepted);
send(sockconnected);
}
}
int sndproc()
{
for ( ; ; )
{
shmat();//这里连接父进程建立的共享内存并判断其内容是否为 "0"如果不是则循环判断直到其值为 "0"
// 共享内存如果值 为 "0" 重新赋值为 "1"
read(sockconnected);
send(sockaccepted);
//共享内存重新赋值为 "0"
}
} |
我想问的是,sndproc函数中使用共享内存其实充当锁的作用,但这有必要么? |
|