一个线程往另一个线程传数据的问题

okcjh214 2005-10-15 09:41:53
我的代码大概是这样的:
struct SMSQUEUE
{
char pCallerNo[20];
char pCalledNo[20];
int type;
};
list<SMSQUEUE> g_MsgQueue;
定义全局对象g_MsgQueue,线程A往这个队列插入数据,线程B从这个队列读数据
线程A:
SMSQUEUE insSMS;
while(!bExit)
{
其他代码
g_MsgQueue.push_back(insSMS);
其他代码

}
线程B:
SMSQUEUE itMsg;
while(!bExit1)
{
其他代码
if(g_MsgQueue.empty())
continue;
itMsg=g_MsgQueue.front();
g_MsgQueue.pop_front();
其他代码
}

两个线程都在访问g_MsgQueue,会不会出问题???
是否需要加入LockCS之类的同步操作????或者cevent来做通知??
...全文
204 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabo 2005-10-16
  • 打赏
  • 举报
回复
CCriticalSection m_cs;

UINT ToClientThreadProc(void *p)
{
m_cs.Lock();
..............
..............
m_cs.Unlock();
}
Atry 2005-10-16
  • 打赏
  • 举报
回复
CRITICAL_SECTION g_cs;

EnterCriticalSection(&g_cs);
LeaveCriticalSection(&g_cs);
DeleteCriticalSection(&g_cs);
InitializeCriticalSection(&g_cs);

用这几个函数
okcjh214 2005-10-16
  • 打赏
  • 举报
回复
我再补充一下,线程A,线程B,都各只有一个线程在运行,不会有两个线程B在同时运行,也不会有两个线程A在同时运行。
palluo 2005-10-15
  • 打赏
  • 举报
回复
当然要加同步代码了。用临界区吧。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧