1. 线程的概念

    进程与线程内核实现 通过函数clone实现的
ps -Lf pid
  1. Linux内核线程实现原理

    同一个进程下的线程,共享该进程的内存区, 但是只有stack区域不共享。

  2. 线程共享资源
    a.文件描述符表
    b.每种信号的处理方式
    c.当前工作目录
    d.用户id和组id

  3. 线程非共享资源
    a.线程id
    b.处理器现场和栈指针(内核栈)
    c.独立的栈空间(用户空间栈)
    d.errno变量
    e.信号屏蔽字
    f.调度优先级

  4. 在主线程里面执行return, 相当于整个进程退出了

  5. 小技巧
    set -o vi 相当于把当前shell,弄成了 vi 编辑器模式

7.创建一个线程
man pthread_create

 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);Compile and link with -pthread.

#include <pthread.h>
#include <unistd.h>
#include <stdio.h>void* func(void *arg) {printf("I am a common thread, pid is %d, tid is %ld\n", getpid(), pthread_self());pthread_exit(NULL);
}int main() {pthread_t tid;pthread_create(&tid, NULL, func, NULL);printf("I am a man thread, pid is %d,create tid is %ld\n", getpid(), tid);printf("I am a man thread, pid is %d, tid is %ld\n", getpid(), pthread_self());pthread_exit(NULL);return 0;
}经测试,主线程使用pthread_exit函数,可以等待子线程的退出。

线程退出函数:

8.线程回收函数:

int pthread_join(pthread_t thread, void **retval);
参数介绍:thread: 表示要回收的线程(创建线程时候传出的第一个参数)retval:要回收的线程的退出信息

线程回收也是阻塞等待回收
代码案例:

#include <pthread.h>
#include <unistd.h>
#include <stdio.h>void* func(void *arg) {printf("I am a common thread, pid is %d, tid is %ld\n", getpid(), pthread_self());// pthread_exit((void *)100);return (void*)(100);
}int main() {pthread_t tid;pthread_create(&tid, NULL, func, NULL);printf("I am a man thread, pid is %d,create tid is %ld\n", getpid(), tid);printf("I am a man thread, pid is %d, tid is %ld\n", getpid(), pthread_self());void * ret;pthread_join((tid), &ret);printf("join tid return value is %d\n", (int)ret);return 0;
}

linux 线程学习初步01相关推荐

  1. linux线程学习初步02

    杀死线程的函数 int pthread_cancel(pthread_t thread); 参数介绍:需要输入的tid 返回值:识别返回 errno成功返回 0 被杀死的线程,退出状态值为一个 #de ...

  2. Linux 线程学习之条件变量

    互斥锁:用来上锁. 条件变量:用来等待,当条件变量用来自动阻塞一个线程,直到某特殊情况发生为止.通常条件变量和互斥锁同时使用. 函数介绍: 1. 名称: pthread_cond_init 目标: 条 ...

  3. linux c++ 多进程初步01

    fork函数 fork函数 ps ajx 这个命令可以查看进程与进程之间的血缘关系 kill 给进程发送一个信号SIGKILL 9号信号kill -SIGKILL pik 杀死进程 进程共享 子进程会 ...

  4. 开发板的I/O在哪里——韦东山嵌入式Linux视频学习笔记01

    一般来说,串口就是开发板的I/O(输入输出)接口.我们可以通过串口向板子发送命令,也可以通过串口把板子的状态信息打印出来. 板载串口和PC的连接 如果板子上有串口,且电脑上也有串口,那直接用串口线相连 ...

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

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

  6. 通用线程: 学习 Linux LVM

    为什么80%的码农都做不了架构师?>>>    通用线程: 学习 Linux LVM "逻辑卷管理"为存储器管理带来的魔力 Daniel Robbins ( dr ...

  7. Linux进程线程学习笔记:运行新程序

    Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下文并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一 ...

  8. Linux线程互斥学习笔记--详细分析

    一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...

  9. 大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程,总时长:14:22:04 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g,提取码: ...

最新文章

  1. java运行时_java编译时与运行时概念与实例详解
  2. 列名必须是一个字符串或者数组_我爱Julia之入门-078(字符串08)
  3. PAT甲级1134 Vertex Cover :[C++题解]顶点覆盖、图论、用结构体存边,bool数组判断
  4. QT的QElapsedTimer类的使用
  5. nginx php fpm 日志,nginx下php-fpm不记录php报错日志怎么办?
  6. 泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)
  7. Developmental Cell | 人类视网膜发育过程中的重要分子机制
  8. Symfony 4.2.4 和 3.4.23 发布,经典 PHP Web 开发框架
  9. POJ1315 UVA639 UVALive5325 Don't Get Rooked题解
  10. java安卓游戏源码下载_77个安卓游戏 android源码
  11. 基于RV1126平台imx291分析 --- 基于subdev的方式
  12. 单片机与PC通信:USB转TTL、USB转RS232、RS232转TTL等情况的分析
  13. 直流稳压电源基本概念及使用方法入门
  14. 秋招面试准备 JS1
  15. fastDB CLI
  16. Balance安装及用法小结
  17. cnPuTTY CAC 0.78.0.1—PuTTY CAC 0.78中文版本简单说明~~
  18. windows 界面
  19. IDEA ctrl+alt+L 格式化快捷键不起作用
  20. 对弧长和坐标的曲线积分

热门文章

  1. 从零开始的全栈工程师——html篇1.2
  2. 允许同站跨域Nginx配置方案
  3. 辗转相除法求最大公约数(c++)
  4. 佳能MP258的5200错误和P08代码解决方法及清零方法
  5. SQL Server 2000数据库移植到SQL Server 2008R2数据库服务器中碰到的”3145错误”及解决办法...
  6. java 泛型嵌套泛型_Java泛型嵌套
  7. android 字符串反转,Golang之字符串操作(反转中英文字符串)
  8. php中trim的用法和例子,PHP ltrim()用法及代码示例
  9. 云南省农村信用社计算机岗位待遇如何,云南农村信用社薪资待遇如何?
  10. 无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...