当前位置: 首页 > news >正文

Linux线程基础学习记录

0.线程特点

(1).线程共享资源:一个进程下的多个线程共享以下资源

                可执行的指令

                静态数据

                进程中打开的文件描述符

                当前工作目录

                用户ID

                用户组ID

(2).线程私有资源:

                线程ID

                PC(程序计数器)和相关寄存器

                堆栈

                错误号(errno)

                优先级

                执行状态和属性

一.C函数创建线程、回收线程、结束线程

1.创建线程 - pthread_create

功能

        创建一个线程,成功时返回(0),失败时返回错误码(errno)

参数:

        thread: 线程对象

        attr     : 线程属性,NULL则表示默认属性

        void*(*routine)(void*):线程执行的函数

        arg      :传递给线程执行函数的参数

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void*(*routine)(void*),void *arg);

                

2.线程回收 - pthread_join

功能:

        回收线程资源,成功时返回0,失败返回错误码。

        调用线程阻塞直到pthread结束

参数:

        thread   : 线程对象,指定要回收的线程

        retval    : 接收线程返回值的地址

int pthread_join(pthread_t thread,void **retval);

3.线程结束 - pthread_exit

功能

        结束当前的线程,释放该线程的私有资源。

参数

        retval: 可被其他线程通过 pthread_join 获取。

void pthread_exit(void *retval);

4.线程创建、回收、结束,代码示例

#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>char message[32] = "Hello World";
void *thread_func(void *arg);int main()
{pthread_t a_thread;        //创建线程对象void *result;              //用于接收线程返回值int ret;/* 创建线程,绑定线程执行函数 */ret = pthread_create(&a_thread,NULL,thread_func,NULL);if(0 != ret){printf("fail to pthread_create\n");exit(-1);}/* 阻塞等待回收线程资源 */pthread_join(a_thread,&result);            //将结果存入resultprintf("result is :%s\n",result);printf("message is :%s\n",message);return 0;
}/* 线程函数 */
void *thread_func(void *arg)
{sleep(1);printf("thread_func has been created\n");strcpy(message,"marked by thread_func\n");/* 结束线程 */pthread_exit("thank you for waiting for me\n");     //线程结束返回参数信息
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 仅12%程序员担心被AI取代 62%开发者在使用AI工具
  • 贝莱德与摩根大通的最新季度持仓分析
  • 一个能减少重绘的属性?分享 1 段优质 CSS 代码片段!
  • html+css+js网页设计 作业歌帝梵官网首页1个页面6个js效果
  • C#中的多线程
  • 数字化营销在公域场景中的无限可能
  • 超详细!!!electron-vite-vue开发桌面应用之Electron Forge打包项目(三)
  • 作业08.16
  • excel 2019版本的index match搜索功能
  • 数据结构-查找
  • python-NLP:4句法分析
  • 共塑AI新篇章 | 云轴科技ZStack亮相2024中国操作系统产业大会
  • 阿里云服务器CentOS7安装MinIO
  • Linux 服务器上简单配置 minio
  • VulnHub:BlueMoon
  • 【面试系列】之二:关于js原型
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular 4.x 动态创建组件
  • Angular4 模板式表单用法以及验证
  • canvas 五子棋游戏
  • JavaScript 基础知识 - 入门篇(一)
  • JAVA多线程机制解析-volatilesynchronized
  • js继承的实现方法
  • Leetcode 27 Remove Element
  • Redux 中间件分析
  • Selenium实战教程系列(二)---元素定位
  • 安装python包到指定虚拟环境
  • 对超线程几个不同角度的解释
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 网页视频流m3u8/ts视频下载
  • 问题之ssh中Host key verification failed的解决
  • 原生js练习题---第五课
  • ​queue --- 一个同步的队列类​
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C#)获取字符编码的类
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (六)c52学习之旅-独立按键
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原)本想说脏话,奈何已放下
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ../depcomp: line 571: exec: g++: not found
  • .cn根服务器被攻击之后
  • .NET 解决重复提交问题