• 哲学家问题


    每次获得一个筷子,会引起死锁的。

    解决的办法是,每次尝试去获取所需的两个筷子。第一次获取左边的,第二次获取右边的。

    只有当两个都获取到了,才吃东西。否则就要释放所有获得的筷子。

    这样就能避免死锁了。

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <pthread.h>
    
    pthread_mutex_t chopsticks[5];
    
    void fun(int i){
    
        
        int k = 0;    
        
        while(k<50){
    
    
            if(pthread_mutex_trylock(&chopsticks[i])==0){
    
                if(pthread_mutex_trylock(&chopsticks[(i+1)%5])==0){
                    
                printf("zhexuejia %d is eatinging
    ",i);k++;
                usleep(10);
                pthread_mutex_unlock(&chopsticks[i]);
                pthread_mutex_unlock(&chopsticks[(i+1)%5]);    
                
    
                }else{
    
                    
                    printf("zhexuejia %d is thinking
    ",i);k++;
                    pthread_mutex_unlock(&chopsticks[i]);
                    usleep(10);
    
                }
    
    
    
    
            }else{
    
                printf("zhexuejia %d is thinking
    ",i);k++;
                usleep(10);
    
            }
    
    
            
    
    
    
    
        }
    
    
    }
    
    int main(){
    
        int t = 0;
        while(t<5){
    
        pthread_mutex_init(&chopsticks[t],NULL);
        t++;
    
        }
    
        pthread_t tid1,tid2,tid3,tid4,tid5;
        pthread_create(&tid1,NULL,(void*)fun,0);
        pthread_create(&tid2,NULL,(void*)fun,1);
        pthread_create(&tid3,NULL,(void*)fun,2);
        pthread_create(&tid4,NULL,(void*)fun,3);
        pthread_create(&tid5,NULL,(void*)fun,4);
    
        pthread_join(tid1,NULL);
        pthread_join(tid2,NULL);
        pthread_join(tid3,NULL);
        pthread_join(tid4,NULL);
        pthread_join(tid5,NULL);
    
    
    
    
    
    }

  • 相关阅读:
    菜鸟学存储:网络存储IP SAN与IB SAN
    读xml高手
    预先加载图片
    xred520
    最简单准确的硬盘整数分区设置操作方法
    Google 每天处理约 20000TB 的数据
    IE 8 无法正常使用网站后台编辑器问题
    常用的JS技术1
    adodb stream 使用说明
    [Tools] JDGUI(Java Decompiler)
  • 原文地址:https://www.cnblogs.com/wzben/p/5410742.html
Copyright © 2020-2023  润新知