none
多线程问题 RRS feed

  • 问题

  •     假设有两个线程同时访问同一个临界区的时候,这样会不会引起死锁!前提是没有对这两个线程进行优先级设置,默认的情况下,应该是同等的优先级。
    2010年1月4日 13:42

答案

  • 虽然是两个线程。但是操作系统会对线程进行调度,不可能有两个线程在同一个时间点访问同一个临界区。临界区的PV操作是原子性的。所以执行线程在确定是否进入临界区的操作中是不会发生调度的。发生死锁是要具备四个条件的。互斥,非剥夺,占有等待,循环等待。因其原子性,所以不存在循环等待的可能。即不会发生死锁。


    麻烦把正确答案设为解答。
    • 已标记为答案 飘零雪 2010年1月5日 1:38
    • 取消答案标记 飘零雪 2010年1月5日 1:43
    • 已标记为答案 飘零雪 2010年1月5日 1:45
    2010年1月5日 1:33
    版主

全部回复

  • 同时访问临界区,只会有一个进入。就一般情况而言,不会产生死锁。
    2010年1月4日 19:01
  •      
    2010年1月5日 0:58
  • 同时访问临界区,只会有一个进入。就一般情况而言,不会产生死锁。

    我说的同时的意思是在同一个时间点上。相同优先级的两个线程同时访问一个临界区,难道不会造成死锁吗? 要是不会造成死锁,那怎样确定哪一个线程能够获得临界区的权利呢?
    2010年1月5日 0:59
  • 虽然是两个线程。但是操作系统会对线程进行调度,不可能有两个线程在同一个时间点访问同一个临界区。临界区的PV操作是原子性的。所以执行线程在确定是否进入临界区的操作中是不会发生调度的。发生死锁是要具备四个条件的。互斥,非剥夺,占有等待,循环等待。因其原子性,所以不存在循环等待的可能。即不会发生死锁。


    麻烦把正确答案设为解答。
    • 已标记为答案 飘零雪 2010年1月5日 1:38
    • 取消答案标记 飘零雪 2010年1月5日 1:43
    • 已标记为答案 飘零雪 2010年1月5日 1:45
    2010年1月5日 1:33
    版主
  • 执行临界区代码时,操作系统会让CPU执行专门的汇编指令,让CPU进入核心态,不会出现并发。


    http://203.208.39.132/search?q=cache:x0NoaTrR7BoJ:www.host01.com/Print.Html%3F92106+CPU+%E8%BF%9B%E5%85%A5%E6%A0%B8%E5%BF%83%E6%80%81+%E6%8C%87%E4%BB%A4&cd=2&hl=zh-CN&ct=clnk&gl=cn&st_usg=ALhdy2-OMoXwbkcDP9XIh-tO9ggl0gALKA
    2010年1月5日 3:18
    版主