关于多线程同步的几点疑问(以CRITICAL_SECTION 为例)
2007-01-15 12:56
369 查看
关于多线程同步的几点疑问(以CRITICAL_SECTION 为例) 这个问题小弟看了很多资料,大部分都是比较泛泛的讲一下,没有结合经典例子来讲解的,所以还是没有 彻底的明白,希望大家能指点一下: 1、除了全局变量及文件操作,什么情况下需要用多线程同步? 2、如果定义了类A极其成员函数funcA,假设funcA访问了需要互斥的资源,而且在funcA中用 CRITICAL_SECTION m_CritSect做了EnterCriticalSection(&m_CritSect )及LeaveCriticalSection( &m_CritSect );等临界区处理,这样,在一个进程中,使用A 的实例有这几种情况: 1)如果在进程里面有全局的A的实例,m_CritSect的作用使多个线程访问funcA是不是应该没有问题的? 2)如果A的实例不是全局的,而是在线程函数中有多个A的实力,是不是funcA中做的CRITICAL_SECTION 临界点就失效了?此时如果将A中m_CritSect改为static是否可以解决这个问题? 3、一个进程中,如果有多个需要同步的资源,比如要两个全局函数写两个个文件, 是不是需要定义两个 CRITICAL_SECTION m_CritSect的变量来分别对其EnterCriticalSection(&m_CritSect)做临界处理?而且 m_CritSect必须要用全局变量?? 4、如果多个类的实例同时要访问一个资源,比如要写同一个文件,在类里面定义一个 static CRITICAL_SECTION m_CritSect,然后在类成员函数Lock用EnterCriticalSection(&m_CritSect )处理线程 同步,是否可行? 小弟对这个多线程同步的问题比较模糊,不知能否有哪位大狭能让小弟明白其中道理,小弟不胜感激 !!期待中 如能发几个小demo给我研修一番,感激不尽!先谢谢各位...... 小弟如能搞懂,必将自己所学整理成册让大家受益 我的mail:netantsflash@163.com |
| ||
关于多线程同步的几点疑问(以CRITICAL_SECTION 为例) 好象mutex也可以解决threads之间的同步的,我也不是很懂.真希望有高手能一并指点哦. |
| ||
关于多线程同步的几点疑问(以CRITICAL_SECTION 为例) CRITICAL_SECTION 属于轻量级的线程同步对象,相对于mutex来说,它的效率会高很多。mutex可以用于进程之间的同步,CRITICAL_SECTION只在同一个进程有效。 楼主可能对同步机制不是很了解。 我举个例子看看,也许对你有帮助。 全局变量 int num[10]; 线程函数 void setvalue(int var) { for(int i=0;i<10;i++) num[i] = var; } 如果在两个线程同时调用 setvalue(1) ,setvalue(2),有可能出现在线程一的for i= 5的时候,开始执行线程 2的for()循环。 这时等两个函数都运行结束的时候,全局变量的值就不是你需要的结果了。 如果要解决这个问题,就需要加上CRITICAL_SECTION CRITICAL_SECTION m_sec; InitCrit..... void setvalue(int var) { EnterCriticalSection(&m_sec); for(int i=0;i<10;i++) num[i] = var; LeaveCriticalSection(&m_sec); } 这时,线程一在执行for里面的循环时,如果windows切换到了线程2运行setvalue()函数,线程2在执行EnterCriticalSection(&m_sec);时就会阻塞,等待线程1执行了Leave时候才会继续执行。 另外,EnterCriticalSection()里面的变量需要是同一个时才会出现互斥。 如果需要分别访问多个互斥资源时,应该定义多个互斥量 |
| ||
关于多线程同步的几点疑问(以CRITICAL_SECTION 为例) 1,根据自己实际情况去定 2,如果funa访问了类成员内部的互斥资源,无论A是全局的或者局部的实例,都是有效的。否则 2。1,只有一个全局A的实例时有效。 2。2,无效;需要改成全局的或者static 3,对 4,可以 |
相关文章推荐
- 关于多线程同步的几点疑问(以CRITICAL_SECTION 为例)
- 关于CRITICAL_SECTION的问题
- 关于CRITICAL_SECTION、CCriticalSection和信号量的问题
- 关于Java equals()方法的几点疑问
- 关于软件工程的几点疑问
- 关于addview的几点疑问
- 关于csdn博客的几点疑问
- 关于CRITICAL_SECTION与 CMutex 的看法
- 关于同一线程两次调用EnterCriticalSection的测试
- 关于 windows 互斥锁CRITICAL_SECTION 多次加锁,需要多少释放的问题
- 多线程同步之CRITICAL_SECTION(临界区)
- 关于CRITICAL_SECTION的一些理解
- 关于Surf算法的几点疑问
- 关于Unicode几点疑问的总结
- 关于使用EnterCriticalSection思考
- 关于QT 中 QDialog的几点疑问的解答
- UI设计中关于设计规范、切图和尺寸的几点疑问?
- 关于使用博客园后的几点疑问。
- 关于Java String对象创建的几点疑问
- 关于request.getRealPath()的几点疑问