- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2013-02-22 11:59 编辑
iw1210 发表于 2013-02-22 11:39 ![]()
用队列了么?
用了,你看源码:
q_add().....
队列没问题。活都干完了,激活事件后select不响应了。
这是worker里激活select的代码。最后的几个线程,执行完fprintf后没消息了。- int evt=conn->events;
- conn->events=0;
- pthread_mutex_lock(&beatLock);
- FD_SET(sock,&rfds);
- if (conn->woff > 0) FD_SET(sock,&wfds);
- FD_SET(sock,&efds);
- pthread_mutex_unlock(&beatLock);
- fprintf(stderr,"work %lu:sock=%d,events=%08X\n",pthread_self(),sock,evt);
- if(!pthread_mutex_trylock(&beatLock)) {
- beatc='\n';
- write(beat[1],&beatc,1);
- pthread_mutex_unlock(&beatLock);
- }
复制代码 这几个fd的最后遗言:
work 139915560453888:sock=9,events=00000001
work 139915508004608:sock=8,events=00000001
work 139915549964032:sock=10,events=00000001
work 139915570943744:sock=11,events=00000001
work 139915581433600:sock=12,events=00000001
work 139915539474176:sock=13,events=00000001
work 139915528984320:sock=14,events=00000001
就这几个事件丢了,相应的fd没有关闭。服务器没有死。
继续用telnet localhost 9876
还是可以正常工作的。 |
|