VC++ 关于多线程如何可以数据共享

服务器中两个线程A,B,这A和B分别连着两个不同的socket,这两个线程均为主线程所创建的辅助线程,现在A从它所连的socket中接收数据,B要将A接收到的数据从B所连... 服务器中两个线程A,B,这A和B分别连着两个不同的socket,这两个线程均为主线程所创建的辅助线程,

现在A从它所连的socket中接收数据,B要将A接收到的数据从B所连接的socket发送出去,注意,这两个socket在逻辑上是不区分的,就是后台程序开启的时候,根本不知道这两个线程谁是接收数据的线程,谁是发送数据的线程,这两个线程建立各自的连接之后,谁一直在接收数据,那么它就是A线程(接收数据),那么剩下的就是发送线程,
要求能说出解决的思路就好了,满意的话再加分啊!!!
展开
 我来答
ysdoc
2013-08-02 · TA获得超过746个赞
知道小有建树答主
回答量:586
采纳率:60%
帮助的人:406万
展开全部
那两个socket是两个变量对吧。
接收数据时recv函数的第一个参数即是这两个socket变量中的一个,判断下是两者中的那一个,
这样就能确定那个socket是用于发,那个是用于收了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
felixliu2008
2013-08-02 · TA获得超过295个赞
知道小有建树答主
回答量:337
采纳率:100%
帮助的人:196万
展开全部
使用共享内存方式。
通过共享区域中的内容来区分 A、B 谁是发送,谁是接收。以及需要共享的数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-07
展开全部
多线程的互斥访问资源,临界区等等!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
norosewcgbd
2013-08-06
知道答主
回答量:7
采纳率:0%
帮助的人:8万
展开全部
多线程的数据访问,最简单的方式是加入信号互斥变量
//主程序定义一个全局信号互斥变量,并初始化
CRITICAL_SECTION _Mutex;
InitializeCriticalSection(&_Mutex);
//线程a和b在访问变量C的前面加上
EnterCriticalSection(&_Mutex);
//线程a和b在访问变量C的后面加上
LeaveCriticalSection(&_Mutex);
//主程序退出,时释放资源
DeleteCriticalSection(&_Mutex);

原理就是信号互斥,很好理解。当线程a,执行到
EnterCriticalSection(&_Mutex);,如果线程b等其它线程,已经先执行到
EnterCriticalSection(&_Mutex);就说明其它线程正在对变量C进行操作,线程a就会在EnterCriticalSection(&_Mutex);挂起,必须等到线程b等其它线程执行完
LeaveCriticalSection(&_Mutex);
完成对变量C进行操作后,线程a才开始继续执行EnterCriticalSection(&_Mutex);后面的代码。
同理,如果线程a已经在进入EnterCriticalSection(&_Mutex);,后,其它线程在执行到EnterCriticalSection(&_Mutex);,会等待线程a
LeaveCriticalSection(&_Mutex);后,才能继续执行

但是,用信号互斥要小心死锁现象,例如上面线程a已经进入EnterCriticalSection(&_Mutex);,还没从
LeaveCriticalSection(&_Mutex);
退出,线程b在EnterCriticalSection(&_Mutex)处挂起等待,如果线程a在
LeaveCriticalSection(&_Mutex);
退出前执行了一个无法返回的函数(等待其它信号等,这个信号可能就是线程b才能给出的),两个线程都挂起了,死锁
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式