C#多个线程同时调用同一个socket实例的Send方法会发生什么?
Socket指c#自带的相关类使用阻塞式发送。假设2个线程实例t1,t2;t1发送“aaa”,t2发送"bbb"(假设已知物理上t1先发送了它想要发送的第一个字符)下列几...
Socket指c#自带的相关类
使用阻塞式发送。
假设2个线程实例t1,t2;t1发送“aaa”,t2发送"bbb"(假设已知物理上t1先发送了它想要发送的第一个字符)
下列几种中的哪一个符合现实?
Send方法实际上隐式加锁。t1发送aaa 且 对方收到aaa,发送aaa时t2阻塞;然后t2发送bbb且对方收到bbb
要发送的信息交错着被发送出去。对方可能收到ababab
t1正常发送,t2调用Send时抛类似于java中IOException的异常。对方只收到aaa
另外,我能不能显式加锁,以实现第一种情况? 展开
使用阻塞式发送。
假设2个线程实例t1,t2;t1发送“aaa”,t2发送"bbb"(假设已知物理上t1先发送了它想要发送的第一个字符)
下列几种中的哪一个符合现实?
Send方法实际上隐式加锁。t1发送aaa 且 对方收到aaa,发送aaa时t2阻塞;然后t2发送bbb且对方收到bbb
要发送的信息交错着被发送出去。对方可能收到ababab
t1正常发送,t2调用Send时抛类似于java中IOException的异常。对方只收到aaa
另外,我能不能显式加锁,以实现第一种情况? 展开
1个回答
展开全部
Socket 连接是各自独立的,不可能收到 ababab 。服务端会为来自每个客户端的请求建立独立的通道,互不影响。
更多追问追答
追问
我知道服务器的每个socket实例对应不同的客户端……
我是说,同一个客户端c的两个线程t1、t2都调用c的socket的send方法,则服务器对应于客户端c的socket收到什么?
追答
服务器将为 t1 和 t2 分别创建独立的通道,各自接收。这种情况等价于不同的客户端连接到同一个服务端。举例说明,你在你的浏览器打开两个标签,打开同一个网站,然后在两个标签中点击不同的连接,服务器不会搞错,各是各的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询