一个套接字能否同时进行两个以上的sendto或者recvfrom操作? 我创建的一个数据报套接字,绝大多数时间处于recvfrom状态(阻塞),只有收到数据后才将数据处理并sendto给对方,如果正在sendto时,我还能不能再sendto?也就是说需要互斥访问套接字吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用重叠的i/o模型要使用WSASendTO 我的UDP服务就是一个IOCP服务,有两个工作线程,我担心两个线程同时WSASendTo 当然了,一个cpu同时只能干一件事情,即使是并行 的程序也是有os分配时间片来做的!不过,用重叠io或完成端口,可以把消息放入消息队列中,防止消息丢失!否则会抛弃同时发生的sendto 消息。 听了大家的意见,也就是说在操作sendto时还是应该使用临界区进行互斥访问,是吧? 如果你自己处理,不利用已经有的机制,你可以用临界区;否则可以用类似WSASend之类的函数把具体如何同步的问题发给系统处理。 你发出两个异步的SendTo当然最终会完成两个发送动作。动作完成后会从IOCP的队列得到消息。 我程序里是这样的:开了两个工作线程,首先投递一个WSASendTo,一旦GetQueuedCompletionStatus触发,立即保存信息,再投递WSASendTo,然后才处理刚才获得的信息,处理完毕后使用sendto返回客户,我担心的是两个线程里如果同时执行到sendto该咋办,因为是UDP,两个线程都是使用同一个套接字。 两个线程都有可能在GetQueuedCompletionStatus的地方阻塞,如果第一个SendTo完成时,只有其中的一个线程在GetQueuedCompletionStatus中得到消息。完成动作的消息是唯一的,所以无论多少个线程,对于每个在IOCP队列中的消息来说通过GetQueuedCompletionStatus得到的消息,在任一时刻只会由其中的一个线程获得。 GetQueuedCompletionStatus完成后,如果有同时sendto发生,那你可以使用互斥访问。 MFC 打开回收站 如何编辑框只能输出不能输入? 我的程序只有Release呢?怎样才能添加Debug调试环境? 昨天用LCC写了一个取汉字拼音首字的函数..拿出来给大家共享.大家发表一下高见.. spy++的问题 再请教一些关于位图设置问题 请问_inp,_inpw,_outp,_outpw函数需要的头文件是什么? 怎样设计自己的类? 用MFC做Activex控件,如何实现里头的Picture Control跟随控件的大小而改变? VS2012编辑器不能应用VS2010的工具集? 请高手帮忙!一个付值问题? 怎么能让我上qq啊
动作完成后会从IOCP的队列得到消息。
开了两个工作线程,
首先投递一个WSASendTo,一旦GetQueuedCompletionStatus触发,立即保存信息,再投递WSASendTo,然后才处理刚才获得的信息,处理完毕后使用sendto返回客户,我担心的是两个线程里如果同时执行到sendto该咋办,因为是UDP,两个线程都是使用同一个套接字。