多线程,每个线程都selecet为什么不会出现类似“惊群”的现象
有多个多线程,每个线程都selecet,为什么当一个socket可读的时候,不会唤醒每个线程里的select
for(int i = 0; i <THREAD_NUMBER; i++)
{
pthread_create(&pid[i], NULL, &start, NULL);
// sleep(1);
}
void* start(void* pParam)
{
int fd = socket(PF_INET, SOCK_STREAM, 0);
sockaddr_in sa_in;
memset(&sa_in, 0, sizeof(sa_in));
sa_in.sin_family = AF_INET;
sa_in.sin_port = htons(3007);
sa_in.sin_addr.s_addr = inet_addr(ipaddr);
int ret = connect(fd, (struct sockaddr*)&sa_in, sizeof(sa_in));
//往echo server写,在把“abc”从server读回来
write(fd,"abc",3)
//1024一般为linux最大socket值,就是本进程所有的socket都select到了
if (select(1024,&readfds, NULL, NULL, &tv) > 0)
{
}
}
上面是一些骨架代码,,奇怪的是线程1的echo只会被线程1的select到,为什么不会被“线程2”select到?当一个socket可读的时候,它怎么知道要唤醒正在select它的线程。它应该只能通知到socket所在的进程吧。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论