zoukankan      html  css  js  c++  java
  • 哲学家问题

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

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

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

    这样就能避免死锁了。

    #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);
    
    
    
    
    
    }

  • 相关阅读:
    ES6 常用总结(前端开发js技术进阶提升总结)
    web前端之es6对象的扩展
    ES6数组及对象遍历的新增方法 entries(),keys() 和 values()
    关于日期
    最近遇到的几个小东西
    求模
    同步 异步请求的认识
    变量名和函数名声明提升
    机顶盒前端开发小结
    js节点使用 碎片节点
  • 原文地址:https://www.cnblogs.com/wzben/p/5410742.html
Copyright © 2011-2022 走看看