想问几个关于多线程里面设定临界区的问题

tczyp 2007-04-12 12:10:09
设定临界区可以用:
Monitor.Enter(this);
//线程安全代码(1)
Monitor.Exit(this);

但是我这样设置了,在调试的时候还是发现会有两个线程同时进入了“线程安全代码(1)” 代码段里面,为什么啊?其中那个参数,的意义是不是说这个对象在Exit(对象)语句调用之前都不允许访问?就是说精确的说,这个函数是锁定了一个代码段还是锁定了一个对象,比如,如果我这个类还有另外一个函数里面也有
Monitor.Enter(this);
//线程安全代码(2)
Monitor.Exit(this);

那么如果我进入了线程安全代码(1),那么还能不能同时进入线程安全代码(2)?
...全文
405 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
suo_guang 2007-04-28
  • 打赏
  • 举报
回复
如果多线程应用的多个线程都定义了临界区,则视临界区的实现“语义”,如果优化的并发语义下,两个临界区之间没有数据竞争,则两个临界区所在的线程可以同时进入临界区。如果是串行语义,则不论临界区之间是否有数据竞争,同时只能有一个线程进入临界区。
StarCraftPJF 2007-04-20
  • 打赏
  • 举报
回复
guanzhu
tczyp 2007-04-19
  • 打赏
  • 举报
回复
InterlockedIncrement?C#能用吗?
IntelSupport 2007-04-16
  • 打赏
  • 举报
回复
临界区

优点, 简单,常用, 算法容易实现

缺点: 同步开销比较大,使用关键代码段时,很容易进入死锁状态,因为在等待进入关键代码段时无法设定超时值。

如果可能应该使用 InterlockedIncrement 这种开销非常小的的函数。

568

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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