zoukankan      html  css  js  c++  java
  • 线程死锁例子

    /*  头文件 */  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <sys/types.h>  
    #include <pthread.h>  
    #include <signal.h>  
      
    pthread_mutex_t mutex_one,mutex_two;  
    pthread_mutex_t mutex;  
    pthread_cond_t cond;  
      
    void *thread_routine_one(void *arg)  
    {  
        pthread_cond_wait(&cond,&mutex);//确保two线程先运行  
      
        printf("thread_routine_one: lock mutex_one!
    ");  
        pthread_mutex_lock(&mutex_one);  
      
        printf("thread_routine_one: lock mutex_two!
    ");  
        pthread_mutex_lock(&mutex_two);//获取two锁,这个要等待two线程对two锁的释放  
      
        sleep(1);  
        printf("thread_routine_one: unlock mutex_two!
    ");  
        pthread_mutex_unlock(&mutex_two);  
      
        printf("thread_routine_one: unlock mutex_one!
    ");  
        pthread_mutex_unlock(&mutex_one);  
      
        return NULL;  
    }  
      
    void *thread_routine_two(void *arg)  
    {  
        printf("thread_routine_two: lock mutex_two!
    ");  
        pthread_mutex_lock(&mutex_two);//获取two锁  
        pthread_cond_signal(&cond);//让one线程运行  
        sleep(1);//休眠,让one可以先运行获取one锁  
      
        printf("thread_routine_two: lock mutex_one!
    ");  
      
        pthread_mutex_lock(&mutex_one);//获取one锁,这个同样必须等待one线程多one锁的释放  
      
        /**这时出现死锁现象了,在two线程要等待one线程对one锁的释放,同时two锁没有释放 
         * 然而在one线程需要等待two线程对two锁的释放,然后才会对one锁的释放!出现相互等待的过程**/  
      
        printf("thread_routine_two: unlock mutex_one!
    ");  
        pthread_mutex_unlock(&mutex_one);  
      
        printf("thread_routine_two: unlock mutex_two!
    ");  
        pthread_mutex_unlock(&mutex_two);  
      
        return NULL;  
    }  
      
    void main()  
    {  
        pthread_t pthread_one,pthread_two;  
      
        pthread_mutex_init(&mutex_one,NULL);  
        pthread_mutex_init(&mutex_two,NULL);  
        pthread_mutex_init(&mutex,NULL);  
        pthread_cond_init(&cond,NULL);  
      
        pthread_create(&pthread_one,NULL,thread_routine_one,NULL);  
        pthread_create(&pthread_two,NULL,thread_routine_two,NULL);  
      
        while(1)  
            sleep(1);  
    }  

     线程程A已经拥有至少一个资源,此时又去申请其他资源,而该资源又正在被B线程使用,而同时B线程也在等待A线程的资源释放后才会释放自己的资源,便会造成死锁。此时请求进程阻塞,但对自己已经获得的资源保持不放,

  • 相关阅读:
    Android 开发之 HelloWorld
    Spring 声明式事务管理
    对于初步搭建好的SSH框架进行简化(注解的使用)
    在已有的 eclipse 中离线配置 android 开发环境
    SSH框架整合总结
    Android的学习第六章(布局一TableLayout)
    Android的学习第六章(布局二--RelativeLayout)
    Android的学习第六章(布局一LinearLayout)
    我的Android第五章
    我的Android第四章
  • 原文地址:https://www.cnblogs.com/mcy0808/p/7420955.html
Copyright © 2011-2022 走看看