关于线程同步的问题!

zgysc 2005-01-03 09:58:45
我在主线程中定义了个public型的链表,
typedef struct node
{
int ch;
int doid;
struct node *next;
}linknode;

我另外创建了两个线程,他们的任务是取链表第一个节点的ch和doid,如果两个值都为-1,那么就不用处理,视为没有可执行的任务,我利用WaitForSingleObject(hEvent,INFINITE);
然后我在主线程中向此链表添加节点,并SetEvent(hEvent),我想问的是我在主线程中添加节点时是否也要同步?怎样同步?麻烦大侠们给出示例代码!
...全文
127 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyelf 2005-01-04
  • 打赏
  • 举报
回复
如果子线程只是读,可以不用同步,但是在读取的时候最好判断链表是否为空
hjunxu 2005-01-04
  • 打赏
  • 举报
回复
要做同步了。
oyljerry 2005-01-04
  • 打赏
  • 举报
回复
读写用CriticalSection,Mutex等同步
oyljerry 2005-01-04
  • 打赏
  • 举报
回复
读和写需要同步的
HunterForPig 2005-01-04
  • 打赏
  • 举报
回复
一个取,一个写
如果真要同步就是读写的同步了
http://dev.csdn.net/develop/article/21/21300.shtm
DentistryDoctor 2005-01-04
  • 打赏
  • 举报
回复
你在此有写操作,所以需要同步。
#include <afxmt.h>
...
CCriticalSection m_csList;
....
CSingleLock lock(&m_csList,TRUE);
betsyalan 2005-01-04
  • 打赏
  • 举报
回复
CriticalSection g_cs;
//主线程中添加节点时
g_cs.Lock;
//添加节点
g_cs.Unlock;

//副线程读取节点时
g_cs.Lock;
//读节点
g_cs.Unlock;
这样做,可以避免主线程写链表的时候,刚好副线程来读,造成数据错误。
Kudeet 2005-01-03
  • 打赏
  • 举报
回复
《WIN32多线程程序设计》下载这本书去看看,他的前面几章里就这个问题做了专门的讲解。
http://www.infoxa.com/asp/book/xxnr.asp?id=1142

15,471

社区成员

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

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