1.线程死锁
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t m;void *runodd(void *d){int i=0;for(i=1;;i+=2){pthread_mutex_lock(&m);printf("奇数:%d\n",i);usleep(100*1000);pthread_mutex_unlock(&m);}
}
void *runeven(void *d){int i=0;for(i=0;;i+=2){pthread_mutex_lock(&m);printf("偶数:%d\n",i);usleep(100*1000);pthread_mutex_unlock(&m);}
}int main(){pthread_t tid1,tid2;pthread_mutex_init(&m,0);pthread_create(&tid1,0,runodd,0);pthread_create(&tid2,0,runeven,0);sleep(3);printf("外部强制停止tid1线程\n");//线程tid1推出后,由于没有释放锁,导致线程tid2拿不到锁,就卡死在这pthread_cancel(tid1);//pthread_mutex_unlock(&m);//如果在这加一个释放锁也可以printf("%s(), line = %d\n",__FUNCTION__,__LINE__);pthread_join(tid1,(void**)0);printf("%s(), line = %d\n",__FUNCTION__,__LINE__);pthread_join(tid2,(void**)0);printf("%s(), line = %d\n",__FUNCTION__,__LINE__);pthread_mutex_destroy(&m);
}2.解决线程死锁
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t m;void handle(void *d){printf("退出后的调用!\n");pthread_mutex_unlock(&m);
}void *runodd(void *d){int i=0;for(i=1;;i+=2){pthread_cleanup_push(handle,0);pthread_mutex_lock(&m);printf("奇数:%d\n",i);usleep(1000*1000);pthread_mutex_unlock(&m);pthread_cleanup_pop(0);}
}
void *runeven(void *d){int i=0;for(i=0;;i+=2){pthread_mutex_lock(&m);printf("偶数:%d\n",i);usleep(1000*1000);pthread_mutex_unlock(&m);}
}int main(){pthread_t tid1,tid2;pthread_mutex_init(&m,0);pthread_create(&tid1,0,runodd,0);pthread_create(&tid2,0,runeven,0);sleep(3);printf("外部强制停止tid1线程\n");//调用pthread_cancel结束tid1线程,会触发pthread_cleanup_push()函数,然后调用handle()函数里的pthread_mutex_unlock()解锁函数,来释放锁,线程tid2拿到锁后继续执行pthread_cancel(tid1);printf("%s(), line = %d\n",__FUNCTION__,__LINE__);pthread_join(tid1,(void**)0);//等待线程tid1结束,如果不调用pthread_cancel(tid1)结束线程,则一直在runodd里循环.printf("%s(), line = %d\n",__FUNCTION__,__LINE__);//sleep(3);//退出线程tid2//pthread_cancel(tid2);pthread_join(tid2,(void**)0);printf("%s(), line = %d\n",__FUNCTION__,__LINE__);pthread_mutex_destroy(&m);
}

Android/Linux线程死锁demo分析相关推荐

  1. [转载]Linux 线程实现机制分析

    自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads ...

  2. Linux 线程实现机制分析

    本文转自:http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位 ...

  3. Linux 线程实现机制分析--转

    http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位,线程是程 ...

  4. linux杀死线程函数,Linux线程-pthread_kill

    该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUI ...

  5. linux线程的实现【转】

    转自:http://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个 ...

  6. linux 线程--内核线程、用户线程实现方法

    Linux上进程分3种,内核线程(或者叫核心进程).用户进程.用户线程 内核线程拥有 进程描述符.PID.进程正文段.核心堆栈 当和用户进程拥有相同的static_prio 时,内核线程有机会得到更多 ...

  7. linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...

    并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Wi ...

  8. 浅谈linux线程模型和线程切换

    本文从linux中的进程.线程实现原理开始,扩展到linux线程模型,最后简单解释线程切换的成本. 刚开始学习,不一定对,好心人们快来指正我啊啊啊!!! linux中的进程与线程 首先明确进程与进程的 ...

  9. 《手Q Android线程死锁监控与自动化分析实践》

    一.问题背景 手Q每个版本上线以后研发同学都会收到各种问题反馈.在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下: 1.问题表象:"未读不消失"."图片不展 ...

最新文章

  1. Android教你打造独一无二的刷新加载框架
  2. golang channel 管道
  3. 3说明书_电子产品说明书应该怎么翻译?知行君认为需要注意这3点
  4. Linux软件安装的几种方法 (一)—— apt-get
  5. php中浮点数计算问题
  6. 刷路由器文件服务器打开失败,路由器升级错误引发网页打开失败故障
  7. docker学习-运行第一个docker镜像hello world
  8. 声纹技术:让智能语音助手真正“认得”自己
  9. [SVM系列之一]白话支持向量机(SVM)
  10. Mysql安装+卸载教程
  11. mysql索引(七)唯一索引
  12. 一键清空朋友圈软件_微信清理朋友圈app下载-微信清理朋友圈下载v1.8.0 安卓版-西西软件下载...
  13. Windows引导过程(BIOS,UEFI)
  14. 4.11每日一题之亲戚(洛谷c++)|简单并查集
  15. Springboot考研网上辅导系统fu1ei计算机毕业设计-课程设计-期末作业-毕设程序代做
  16. 【chrome插件开发二】chrome常用语法汇总
  17. postgresql 致命错误
  18. 福州发生持刀伤人事件:1死19伤 警方全力追捕嫌犯
  19. 微信小程序 - 下载文件到本地、打开文档
  20. 原码,反码,补码,傻傻分不清?

热门文章

  1. Linux常用命令——rsync
  2. spring boot(三) 集成mybatis
  3. topcoder srm 540 div1
  4. NODE_ENV跨平台设置
  5. 第21章 java线程(1)-线程初步
  6. 支付宝接口调试经验总结
  7. document.all用法
  8. Spring Cloud 是什么
  9. .NET技术大系概览
  10. 2017java面试_2017 Java面试大全(一)