RE: Re: [cpp] socket API 在多线程的环境里是不是线程安全的?
chen_cnd at hotmail.com
Sun May 7 12:29:40 CST 2006
对内核来说,它内部有lock机制,所以不在乎应用程序是用哪个线程来读写socket的。
但是,对应用程序来说,如果用UDP,可以用多个线程来读写同一个socket,因为既然应用程序用了UDP,就不会在乎两个包的前后接收顺序。
但是如果用TCP,不能用多个线程来读写同一个socket,数据会错乱。既然应用程序用了TCP,就一定在乎两个包的前后接收顺序。
我认为用不同线程来读写同一个socket是个设计问题,对应用程序很不利。建议看一下ACE里的leaker follower pattern。
> Date: Sat, 6 May 2006 20:46:37 +0800> From: yangweiqin at gmail.com> To: cpp at codingnow.com> Subject: Re: [cpp] socket API 在多线程的环境里是不是线程安全的?> > 第一种情况不知道> 第二种情况不需要,socket可以在两个线程中同时读写的,我试过的> > 在 06-5-6,Yi Fan<heavenstar at gmail.com> 写道:> >> > 第一种情况就是加一个互斥量来解决。> >> > 至于第二种情况,我现在不确定的是:这样的socket操作需不需要线程同步的机制?> >> >> > 在06-5-6,sky tiger <skytiger86 at gmail.com> 写道:> > > 能不能用p、v操作之类的加锁?> > >> > > 在 06-5-6,Yi Fan<heavenstar at gmail.com> 写道:> > > >> > > > 以前写程序遇到的问题。> > > >> > > > 有2个线程,thread_A 和 thread_B, 还有4个套结字, socket_A ,socket_B,socket_C> > ,socket_D> > > >> > > > 在thread_A 中读这4个套结字( 就是调用receive() ), 同时在thread_B 中也读这4个套结字,> > > >> > > > 这样做估计会有问题,读到的数据可能有错,后来就用互斥量来同步一下。> > > >> > > >> > ---------------------------------------------------------------------------------------------------------------------------------------------------> > > >> > > >> > > > 后来遇到一个问题,与这个类似,就是:> > > >> > > > 有2个线程,thread_A 和 thread_B, 还有4个套结字, socket_A ,socket_B,socket_C> > ,socket_D> > > >> > > > 在thread_A 中读这4个套结字( 就是调用receive() ), 同时在thread_B 中写这4个套结字(就是调用send())> > > >> > > > 这样做会不会有问题?读写数据会不会有出错的可能?> > > >> > > >> > > > ( 关于这个问题,问过一些身边的人,其中有一个程序员说> > > >> > > > 读写操作会修改一些socket的成员变量和socket的全局变量,所以这种情况也要做同步。)> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > > _______________________________________________> > > > Cpp mailing list> > > > Cpp at codingnow.com> > > > http://codingnow.com/mailman/listinfo/cpp> > > >> > > >> > >> > > _______________________________________________> > > Cpp mailing list> > > Cpp at codingnow.com> > > http://codingnow.com/mailman/listinfo/cpp> > >> >> >> > _______________________________________________> > Cpp mailing l
ist> > Cpp at codingnow.com> > http://codingnow.com/mailman/listinfo/cpp> >> >> > _______________________________________________> Cpp mailing list> Cpp at codingnow.com> http://codingnow.com/mailman/listinfo/cpp
_________________________________________________________________
与联机的朋友进行交流,请使用 MSN Messenger:
http://messenger.msn.com/cn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20060507/fa442132/attachment.html
More information about the Cpp
mailing list