首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教各位一个有关问题 socket阻塞的原理是什么

2012-03-31 
请问各位一个问题 socket阻塞的原理是什么?我们知道在用socket的时候,阻塞模式下,accept 等函数,如果没有

请问各位一个问题 socket阻塞的原理是什么?
我们知道在用socket的时候,阻塞模式下,accept 等函数,如果没有连接到 就会阻塞在那里,

请问阻塞的原理是什么。



[解决办法]
我猜是OS做了事情,应该是类似于WaitForSingleObject一类的事情。

[解决办法]
应该是软中断吧
[解决办法]
阻塞一个线程,也许是自旋锁一类的? 这个就是OS的实现问题了。。。我也不是很清楚。
等高人吧~
[解决办法]
阻塞就是类似锁一类的,linux很可能是自旋锁spin_lock之类的,windows可能是信号,等待事件发生时唤醒线程。具体实现是os的实现的。
[解决办法]
Windows编程里很简单的一个逻辑

while(1)
{
Sleep(10);
}

就能阻塞住线程,而且别看他无限循环,但CPU占用是0%
[解决办法]
accept阻塞是通过异步信号通知实现的:
应用程序调用accept,无客户请求,则放入等待进程队列(不同于就绪队列)。当客户连接请求到达时,硬件中断触发,中断处理函数执行,查找等待该条件的进程并唤醒(现在已实现独立唤醒,以前会唤醒所有阻塞在特定协议端口(比如TCP/80)accept上的进程/线程,这会导致群兽行为,浪费处理器资源),放入就绪进程队列,等待调度程度调度该进程运行,然后实现三次握手,建立新的连接。
[解决办法]
看看linux kernel源代码不就知道了
[解决办法]

探讨

Windows编程里很简单的一个逻辑

while(1)
{
Sleep(10);
}

就能阻塞住线程,而且别看他无限循环,但CPU占用是0%

热点排行