关于临界区,临界区是避免两个线程同时调用同一段代码还是同一个变量?

chengwei_xj 2003-09-09 03:47:04
1.如题.
2.如果在两个不同的线程中设置同一个临界区,但是临界区中的代码不同(但是都对同一个全局变量进行操作),请问,此时,临界区有效吗?

注:不同的线程是指不同的线程函数.
...全文
478 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuxf 2003-12-02
  • 打赏
  • 举报
回复
临界区是避免两个线程同时使用的是同一个变量

临界区中的代码不同(但是都对同一个全局变量进行操作),此时,临界区有效!!!!!!!!!!
chengwei_xj 2003-12-02
  • 打赏
  • 举报
回复
谢谢大家了
xiaohyy 2003-09-16
  • 打赏
  • 举报
回复
1、代码,保证该代码段以原子操作执行
2、有效
JoeRen 2003-09-16
  • 打赏
  • 举报
回复
何必管他是代码还是变量呢?你需要知道的是它的工作原理。然后,当你需要保护代码的时候自然有保护代码的方法,需要保护变量的时候自然有保护变量的方法。一切存乎于心

关于楼上异常的问题,通常是这样解决:

try
{
EnterCriticalSection(&m_Lock);
...
}
catch(...)
{
LeaveCriticalSection(&m_Lock);
throw;
}
LeaveCriticalSection(&m_Lock);
或者(这是推荐的方法!)定义一个类,用构造/析构来保证安全。
chengwei_xj 2003-09-16
  • 打赏
  • 举报
回复
up
akun 2003-09-16
  • 打赏
  • 举报
回复
1. 不是同一段代码,而是多处同步临界区内的代码~~~~2 个 甚至 多个!!!!
司马青衫依旧 2003-09-16
  • 打赏
  • 举报
回复
当然是保护的是代码呀。
wenddy112 2003-09-16
  • 打赏
  • 举报
回复
都是达人在线啊。
vcforever 2003-09-16
  • 打赏
  • 举报
回复
俺想再补充一下临界区是避免多个线程访问同一个共享资源所引起的冲突!
共享资源包括:
1、变量
2、代码
3、一块内存
4、一个数据结构
5、一个文件
或任何其他具有“使用之排他”性的东西!

呵呵……这就是俺对俺前面说的一点补充!
希望对楼主有所帮助!
NowCan 2003-09-15
  • 打赏
  • 举报
回复
1、代码,但这代码一般是用来读写某变量的,否则也没必要了。
2、有效,进程内任意处有效,跨进程无效。
vcforever 2003-09-09
  • 打赏
  • 举报
回复
1、变量
2、有效

注意:在你用临界区时,一定要注意异常的发生,例如
EnterCriticalSection(&m_Lock);
.........
.........
LeaveCriticalSection(&m_Lock);
如果在EnterCriticalSection和LeaveCriticalSection之间的代码有异常发生
那么这次访问永远也不回退出临界区,会造成死锁问题,所以一定要作好异常处理
叶子哟 2003-09-09
  • 打赏
  • 举报
回复
无所谓,只要保护那个变量就可以了
newsb 2003-09-09
  • 打赏
  • 举报
回复
1、临界区可以保护一段代码,当然包含了一个变量
2、可以,临界区也可以相当于互斥量,可以做线程的同步
chengwei_xj 2003-09-09
  • 打赏
  • 举报
回复
》楼上
也就是在两个不同的线程函数中使用同一个临界区变量。
清泉ys 2003-09-09
  • 打赏
  • 举报
回复
避免两个线程同时调同一个变量
两个不同的线程中设置同一个临界区??
Oversense 2003-09-09
  • 打赏
  • 举报
回复
1.变量
2.有效
kukafei 2003-09-09
  • 打赏
  • 举报
回复
是同步同一段代码
chengwei_xj 2003-09-09
  • 打赏
  • 举报
回复
up

15,467

社区成员

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

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