请问EnterCriticalSection和LeaveCriticalSection之间容易发生死锁的操作有哪些?
越详细越好
谢谢

解决方案 »

  1.   

    共同等待(操作)一个标志量,等待标志量为特定的值时才LeaveCriticalSection,而想要一直没有等到!
      

  2.   

    如果只是单个critical_section,一般不会发生死锁,只要配对使用这两个函数
      

  3.   

    UP.pthread_cond.我觉得如果出现死锁.一般就是你用了一个锁(pthread_mutex_lock),比如程序运行的一部分,你return了.
    却没有pthread_mutex_unlock,那这时如果有第二个线程访问这个mutex的时候.就会出现死锁的.UP. pthread和win32的线程一个道理的.
      

  4.   

    关于线程的deadlock,是指两个线程等待相互的资源。如果两个出现这样的情况容易发生deaklock。这种是在多线程编程中出现的问题,对于 critical_section 临界区不不是想上面说得那样,主要是做同步使用,作为共享变量的同步功工具,入果一个线程中使用了EnterCiriticalSection 而没有相应的LeaveCriticalSection的还系统一直占用critical_section,这个时候如果有别的线程想使用临界的话就会发送deadlock了。这是如果你在创建线程,而这些线程要使用share variables的还就会都堆积在系统中。直至系统d掉啊
      

  5.   

    简单就是占用了资源,不释放,而别的线程无法使用,造成deadlock
      

  6.   

    UP.当然是程序写不好才会占着资源不放了.-_-#最常见的就是return 或break;
      

  7.   

    这个100%不可能,我可以告诉你,因为我是把上面两个函数写到一个类里的,前者放在构造函数中,后者放在析构函数中
    我到网上看了一下,他举了一个例子:SendMessage。
    但我看了一下我的代码,没有用到这个函数
    所以请大家帮我列出哪些操作会占着资源不放
      

  8.   

    其实死锁的定义就已经能解答你的问题了,
    A,B两个对象共用资源s,
    A抢到了资源s,B没那么幸运,
    但A释放资源的某个条件是由B来提供的,可是B提供这个条件的前提是得到资源s,
    于是,A就长期的残酷的折磨着s,B则长期的可怜的等待着s,
    这样死锁就出现了。解决的办法有多种,
    1.尽量从逻辑上避免死锁;
    2.出现死锁后不能傻等,要设置超时等手段来干掉霸占s的A;
    3.死锁不容易被调试出来,建议写文件,时间是必须的。
      

  9.   

    boy 第一次看到你哈 :->建立楼主先去看看 OS的进程、线程调度。。
      

  10.   

    可能是你进入CriticalSection的线程并没有得到所要的所有资源啊