Linux——线程1

2023-11-10

一、线程基础

进程:有独立的进程地址空间,有独立的pcb
线程:有独立的pcb,没有独立的进程地址空间
因此进程线程最本质的区别就是:是否共享地址空间
在Linux下线程是最小的执行单位;进程是最小的分配资源单位,可看成只有一个线程的进程

看进程下的线程号:ps -Lf 进程ID LWP—>CPU执行的最小单位

线程共享和非共享

  • 线程共享资源:
    1,文件描述符表
    2,每种信号的处理方式
    3,当前工作目录
    4,用户ID和组ID
    5,内存地址空间(./text/.data/.bss/heap/共享库)

  • 线程非共享资源
    1,线程id
    2,处理器线程和栈指针
    3,独立的栈空间(用户空间栈
    4,errno变量
    5,信号屏蔽字
    6,调度优先级

gdb不支持线程,线程对信号支持也不太好
但线程可以提高程序并发性,且开销小,数据通信共享数据都方便

二、创建线程

线程控制原语

两个概念:
线程ID和线程号(LWP)
线程ID是在进程中用来表示线程身份的;线程号LWP是标识线程身份给cpu用的,用来划分时间轮线,决定每个程序的执行时间
1,pthread_create 创建一个新线程
在这里插入图片描述第一个参数:传出新创建线程的传出ID;
第二个参数:描述线程的属性:通过调整线程属性可以调整线程各种状态,比如说线程分离,线程优先级,线程所占空间大小等,但是要是没有特殊要求就可以只传一个NULL空值;
第三个参数:一个回调参数
第四个参数:泛型指针,就是第三个参数所需要的参数,不需要参数就传入NULL
成功返回0,失败返回错误号

2,pthread_self 获取线程ID
pthread_t pthread_self(void);注意线程ID是pthread_t类型的,且线程ID是进程内部的识别标识,两个进程间的线程ID是允许相同的

在这里插入图片描述

例子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux——线程1 的相关文章

  • 如何在内核内部使用性能计数器?

    我想访问内核内部的性能计数器 我发现了很多在用户空间中使用性能计数器的方法 但是你能告诉我一些在内核空间中使用这些计数器的方法吗 Please 不指定工具名称 我想写自己的代码 最好是内核模块 我使用的是内核为 3 18 1 的 Ubunt
  • Linux 内核中的 64 位 time_t

    我已经编译了内核 3 19 1 但仍然有问题time t 只是一个简单的程序cout lt lt sizeof time t 给出 4 个字节的大小 而不是我的意图的 8 个字节 我应该在 make menuconfig 期间打开特定选项吗
  • 从哪个 Linux 内核/libc 版本开始,Java Runtime.exec() 在内存方面是安全的?

    在工作中 我们的目标平台之一是运行 Linux 的资源受限的迷你服务器 内核 2 6 13 基于旧 Fedora Core 的自定义发行版 该应用程序是用 Java Sun JDK 1 6 04 编写的 Linux OOM Killer 配
  • IPC:在两个程序之间使用 C++ 中的命名管道

    我试图在同一台机器上运行的两个不同程序之间实现IPC 在我的例子中是CentOS7 为了实现一种松散耦合 我决定对 IPC 使用命名管道 因此 我正在使用以下示例并遇到了不同的问题 创建并写入管道 include
  • 针对 openpose 将 GCC 9.3.0 降级到 7 后,cuda_compile_1_ generated_batch_norm_layer.cu.o.Release.cmake 出现 CMake 错误

    你知道我该如何解决以下错误吗 这是在我使用以下命令从 GCC 9 3 0 降级到 7 后发生的 使用以前版本的 GCC 我收到此错误 CMake 不支持的 GNU 版本 不支持高于 8 的 gcc 版本 https stackoverflo
  • 为什么 gcc 会在显然不需要的时候生成 PLT?

    考虑这段代码 int foo int main foo while 1 int foo 在共享对象中实现 编译此代码gcc o main main c lfoo nostdlib m32 O2 e main no pic L shared给
  • Linux 在崩溃时自动重新启动应用程序 - 守护进程

    我有一个运行嵌入式 Linux 的系统 它的持续运行至关重要 基本上 它是一个与传感器通信并将数据中继到数据库和 Web 客户端的过程 如果发生崩溃 如何自动重启应用程序 此外 还有多个线程进行轮询 例如套接字和 uart 通信 如何确保没
  • 如何在 Flutter 中创建类似 Telegram 或 WhatsApp 聊天页面的富文本输入?

    How can I create a Rich Text Input like a Telegram chat page without displaying reserved characters such as bold italic
  • WSL gprof 报告零次

    我正在尝试在 Windows 10 上的 WSL 中使用 gprof 我没有预料到会遇到任何困难 因为上次我在 Windows 7 上的 Ubuntu 虚拟盒中使用它时它工作得很好 与以前一样遵循来自https www thegeekstu
  • 如何在shell脚本中扩展相对路径

    我正在编写一个脚本来使用 bash 在 linux 2 6 上设置环境变量 因此该脚本包含如下命令 export SRC DIR export LIBPATH SRC DIR lib 问题是 当我尝试 echo LIBPATH 时 它显示
  • Linux 上共享内存的生命周期是多长

    我正在使用 ftok shmget shmat shmdt 函数在 Linux 上创建 写入和读取共享段 如果我写入一个程序中的段 然后退出 然后稍后从另一个程序中读取该段 我会惊讶地发现数据仍然存在 我预计当共享一个段的最后一个进程执行
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • 有人可以解释一下以下内存分配 C 程序的性能行为吗?

    在我的机器上 时间 A 和时间 B 交换取决于是否A是 定义或未定义 这会改变两个的顺序 callocs 被称为 我最初将此归因于寻呼系统 奇怪的是 当mmap被用来代替calloc 情况更加奇怪 两个循环花费的时间相同 正如预期的那样 作
  • 如何配置和采样英特尔进程内性能计数器

    简而言之 我试图在用户级基准测试进程中实现以下目标 伪代码 假设 x86 64 和 UNIX 系统 results for iteration 0 iteration lt num iterations iteration pctr sta
  • SDL/C++ OpenGL 程序,如何阻止 SDL 捕获 SIGINT

    我在用SDL http www libsdl org 用于在 Linux 上运行的 OpenGL 应用程序 我的问题是 SDL 正在捕获 SIGINT 并忽略它 这是一个痛苦 因为我正在通过屏幕会话进行开发 并且我无法使用 CTRL C 终
  • 使用vim,如何快速刷新正在处理的网页?

    我已经使用 VIM 几个星期了 同时处理各种网络语言 我真的很喜欢它 我发现必须点击或单击浏览器并刷新页面才能看到代码更改的效果 这很麻烦 更烦人的是 因为我使用的是 Virtual Box 而且我倾向于在主机系统上处理 PDF 文件 因此
  • Motif 库的水平绘制的 RowColumn 类 (C)?

    我正在使用 Motif Library 来完成我的工作 如果有人不熟悉这个库 您可以在这里找到文件列表https packages ubuntu com xenial amd64 libmotif dev filelist https pa
  • 使用 Python for Linux 模拟按键事件

    我正在编写一个脚本来自动运行特定模型 当模型失败时 它会等待用户输入 Enter 键 我可以检测到模型何时失败 但我无法使用 python 在 Linux 上 来模拟按键事件 Windows 有 SendKeys 库来执行此操作 但我想知道
  • 共享库 RPATH 和二进制 RPATH 优先级

    如果共享库链接到二进制文件 并且共享库还依赖于其他库 则共享库的 RPATH 和二进制文件的 RPATH 的优先级 链接器搜索顺序 是什么 二进制文件的 RPATH 是否可以覆盖共享库中的 RPATH 我在共享库RPATH中设置的 ORIG
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上

随机推荐

  • Android通知发送原理之Framework实现(基于Android 10)

    前言 这是一个基于 Android 10 源码 全面分析 Android通知系统实现原理 的系列 这是第三篇 全系列将覆盖 这一篇我们将全面分析通知发送在框架层 服务端 的一系列处理 说明 下文出现的简写 NM gt Notificatio
  • 关于组播239.255.255.250

    网络很慢 用SNIFFER监控 观察到内网一个IP10 192 68 66与239 255 255 250有着大量的数据传送 占据大量带宽 各位同仁有没有遇到类似情况 小虾初步怀疑是有人在网内看网络电视导致的 曾经在一个论坛里看见说是一个播
  • Spring Boot项目结构推荐

    Spring Boot框架本身并没有对项目结构有特别的要求 但是按照最佳实践的项目结构可以减少可能会遇见的坑 尤其是Spring包扫描机制的存在 也可以免去不少特殊的配置工作 典型示例一 root package结构 com lyd exa
  • HTML5 WebSocket的入门使用

    HTML5 WebSocket 长连接 客户端与服务端可以保持长时间的通信 一 具体步骤 1 创建一个websocket实例 连接远程服务器并且需要一个连接服务器的url let baseUrl ws echo websocket org
  • Flutter 图表控件使用笔记

    Flutter 图表控件使用笔记 最近有图表绘制需要 记录下现有的Flutter主流实现方式 原文链接 https blog csdn net weixin 44259356 article details 105147636 flutte
  • 数据库复习(4) 实体关系模型

    实体集 Entity Sets 是实际存在的事物 可以是抽象的 具有属性 attributes 实体集是具有共同性质的同类实体的集合 实体集的属性类型划分 简单的和复合的 conposite 如名字等等 单值的 多值的 如电话号码等 直接的
  • (规定时间过桥问题)A、B、C、D 四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时 1、2、5、10 分钟

    问题描述 A B C D 四个人 要在夜里过一座桥 他们通过这座桥分别需要耗时 1 2 5 10 分钟 只有一支手电 并且同时最多只能两个人一起过桥 请问 如何安排 能够在17分钟内这四个人都过桥 解答思路 核心思想 过桥需要手电 每次让相
  • STM32学习——GPIO

    GPIO就是通用的输入输出端口 通俗的说就是单片机的一些引脚 这些引脚可以控制LED灯 蜂鸣器也可以作为按键输入 ADC采样等 从而实现STM32单片机和外部硬件之间的连接和数据交互 在STM32中以STM32F103C8T6为例 其GPI
  • # `CSP_J_2021` 第一轮认证题

    一 单选题 1 以下不属于面向对象程序设计语言的是 A C B Python C Java D C 2 以下奖项与计算机领域最相关的是 A 奥斯卡奖 B 图灵奖 C 诺贝尔奖 D 普利策奖 3 目前主流的计算机储存数据最终都是转换成 数据进
  • CSS的clip-path属性使用

    前言 clip path CSS 属性使用裁剪方式创建元素的可显示区域 区域内的部分显示 区域外的隐藏 基本语法 clip path clip source basic shape geometry box none 属性说明 clip s
  • iterm2跳板机自动登录脚本

    前言 现在要想访问公司服务器都必须通过跳板机再跳到目标服务器 这么做是运维人员为了安全性考虑和可以高效管理公司庞大的服务器集群 但是我们都知道安全性提高后必定降低我们日常工作的效率 必须先登录到跳板机 再选目标服务器 每次访问服务器都增加了
  • 前端面试题-url、href、src

    一 URL的概念 统一资源定位符 或称统一资源定位器 定位地址 URL地址等 英语 Uniform Resource Locator 常缩写为URL 有时也被俗称为 网页地址 网址 如同在网络上的门牌 是因特网上标准的资源的地址 Addre
  • Python模块学习 ---- atexit

    atexit模块很简单 只定义了一个register函数用于注册程序退出时的回调函数 我们可以在这个回调函数中做一些资源清理的操作 注 如果程序是非正常crash 或者通过os exit 退出 注册的回调函数将不会被调用 我们也可以通过sy
  • 一篇文章让你搞定所有redis面试题

    Redis是什么 Redis是C语言开发的一个开源的 遵从BSD协议 高性能键值对 key value 的内存数据库 可以用作数据库 缓存 消息中间件等 它是一种NoSQL not only sql 泛指非关系型数据库 的数据库 redis
  • Arduino酸度计(PH计)

    在本项目中 我们将通过将模拟pH传感器与Arduino接口来设计pH计 介绍 在化学中 pH是用于指定水基溶液的酸性或碱性的标度 酸性溶液的pH值较低 而碱性溶液的pH值较高 因此 Ph传感器具有确定任何溶液的Ph的能力 即可以判断该物质本
  • JAVA运行时类存在,但是报错:NoClassDefFoundError: Could not initialize class

    我们在部署代码时 明明类存在 但是发现报错 NoClassDefFoundError Could not initialize class 这类问题是由静态成员或静态初始化语句块引起 我们先看下面个类 import org apache c
  • C语言实现MD5/SHA1/SHA256/SHA512

    哈希函数是我们做校验时经常会用到的密码学工具 目前常用的工具有MD5 SHA1 SHA256 SHA512等 其中MD5已经被证实不安全 目前只能作为一种辅助的校验手段 而不能防篡改 下面介绍如何使用mbedTLS协议栈中的hash代码生成
  • BGP属性

    BGP 外部网关协议 此协议不在于自动发现网络拓扑 不追求速度 而在于AS之间选择最佳路由和控制路由的传播 追求可靠性 稳定性 操控性 承载性 使用TCP作为其传输协议 监听端口号为179 保证其可靠性 路由更新只发送更新的路由 适用于在以
  • C++基础学习笔记——对象的定义及引用

    1 类与对象的关系 通常我们把具有同样性质和功能的东西所构成的集合称为类 在C 中 可以把相同内部存储结构和相同操作集的对象看成属于同一类 在C 中 对象是类的实际变量 类与对象间的关系 可以用整型 int 和整型变量 i 之间的关系来类比
  • Linux——线程1

    一 线程基础 进程 有独立的进程地址空间 有独立的pcb 线程 有独立的pcb 没有独立的进程地址空间 因此进程线程最本质的区别就是 是否共享地址空间 在Linux下线程是最小的执行单位 进程是最小的分配资源单位 可看成只有一个线程的进程