- 論壇徽章:
- 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();//這里連接父進(jìn)程建立的共享內(nèi)存并判斷其內(nèi)容是否為 "0"如果不是則循環(huán)判斷直到其值為 "0"
// 共享內(nèi)存如果值 為 "0" 重新賦值為 "1"
read(sockconnected);
send(sockaccepted);
//共享內(nèi)存重新賦值為 "0"
}
} |
我想問的是,sndproc函數(shù)中使用共享內(nèi)存其實充當(dāng)鎖的作用,但這有必要么? |
|