当多个线程共享一个SOCKET时用不用使用同步机制加以保护

解决方案 »

  1.   

    我的意思是当多个线程共用一个连接好的WINSOCKET发送数据时,要不要自己去做同步,WINSOCKET自己或操作系统能否自己处理同步问题。
      

  2.   

    socket内部会处理同步的问题, 但是, 如果你自己不加上同步的话,
    可能数据的到达顺序有问题.
    例如thread1:  send(s, data1, len1, 0);
    thread2:  send(s, data2, len2, 0);由于send函数并不保证发送所有的数据, 它的返回值是已经成功发生的数据
    长度, 因此, 一般调用发送函数的时候, 都有一个循环. 如果你没有同步,
    那么, 有可能对方先收到data1前一部分, 然后是data2的部分,
    然后是data1的后面那部分.等等
      

  3.   

    上面是对tcp来说, udp就无所谓了, udp要么发送出去, 要么什么都没有发送.而且, 一个socket的发送处理, 被多线程使用, 这个程序处理方法不太好.
    最好是有一个专门的发送线程来处理发送的数据, 数据被其它的线程放入
    一个共享buffer中.当然, 这个buffer在读写的时候必须锁定
      

  4.   

    这个BUFFER怎么处理?
    那位大虾再来讲讲互斥区!