双cpu.
两个线程并行执行下面的语句
Index=WSAWaitForMultipleEvents(m_iSocketCount,m_EventArray,FALSE,WSA_INFINITE,FALSE);会不会有问题?1 如果两个线程同时阻塞在这个语句上.此时,同时有100台机器发过数据包来,会有什么问题.2 两个并行的线程真正同时在一个套接字上发送数据,send(hSocket,...)会不会有问题

解决方案 »

  1.   

    没有看过你这样做的..有一些像socket中的重叠I/O模式.不过,那个模式只有一个工作线程.而完成端口模式中不是使用的这个方式阻塞线程的.它是使用的
    GetQueuedCompletionStatus函数.可能你这样的方式会出问题的.
      

  2.   

    多个接收线程时:如果m_EventArray是手动复位类型(ManualReset)的,可能会出现两个线程同时收到同一个网络消息,如果是自动复位类型的(autoReset),就没有问题。
    发送消息时:在同一个socket上多线程send必须进行同步,否则会出问题。
      

  3.   

    领导说要多个线程recv,send.不可违。
    我觉得只要不是几十个cpu,单个线程waitfor之后recv 和 多个线程waitfor recv是一样的,
    因为recv不会阻塞,仅仅是一个内存拷贝。看来只好用两个线程分别处理不同的socket组了。
    至于send,就同步一下,每次send前,先锁一下这个socket对应的互斥锁。
      

  4.   

    send() 是否枷锁 是针对同一个socket的缓冲区的!