当前位置: 首页 > 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");     //线程结束返回参数信息
}

http://www.lryc.cn/news/425417.html

相关文章:

  • 【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示
  • Mybatis中好用的元对象反射工具类 - MetaObject
  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域
  • 深入理解JavaScript性能优化:从基础到高级
  • java+springboot实现定时任务
  • 1.3 数据库的发展历史与演变
  • The field file exceeds its maximum permitted size of 1048576 bytes
  • 【Es】python es操作
  • 吃透前端文件上传与文件相关操作 多文件上传 大文件切片上传 拖拽上传 后续还会更新 断点续传等等
  • 用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)
  • zdpgo_gin_login 框架20240815更新,增加注册路由的功能,一个方法自动拥有注册和登录两个API接口
  • 搭配Intel第13代酷睿处理器
  • uniapp快速回顾,新学websocket连接和BLE连接
  • 激光测距传感器
  • 从数据分析到智能生产:AI在工业中的应用与未来
  • 讲讲android art虚拟机的内存
  • 构建高效社群生态:探索社群系统的力量与未来
  • 数据结构——排序(3):交换排序(续)
  • 2024最新版本Python安装及开发环境配置(vscodepython)
  • 机器学习的定义
  • 2024-08-05升级问题:Android中ScrollView嵌套listview并解决listview显示问题
  • 【热度文章】Java设计模式之中介者模 式
  • 【3.0】vue3语法
  • Navicat Monitor 荣获 2024 年 DBTA “最佳数据库性能解决方案”读者选择奖
  • [论文笔记]ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
  • shuashuashua
  • k8s之HPA
  • fun状态上传,并可手动控制
  • 【Canvas与艺术】四扇叶结
  • 基于DVWA-Brute Force(LowMedium)的渗透测试