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

Day26 线程学习

线程相关知识总结

在多线程编程中,线程的管理和控制是非常重要的部分。本文将对线程的创建、取消、资源回收、竞争及顺序等方面进行详细总结。

一、线程的基本操作

pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) 用于创建新线程。
pthread_exit(void *retval) 或 return 可使线程退出。
pthread_cancel(pthread_t thread) 能够发送取消请求。

二、线程的资源回收

对于线程资源的回收,有两种方式:pthread_join(pthread_t thread, void **retval):适用于子线程任务较短,主线程需要关心子线程状态的情况。
pthread_detach(pthread_t thread):适用于子线程运行很久才结束,主线程不关心子线程状态的情况。

三、线程与进程的对比

线程是 CPU 执行的最小单位,进程是资源分配和任务调度的基本单位。线程创建和调度速度快,并发程度更高。
特点对比:线程:优点:共享进程的数据空间,共享数据方便。
缺点:安全性不好,易带来资源竞争。
进程:优点:进程空间相互独立,安全性好。
缺点:进程间共享数据不方便。

四、线程间的资源竞争

线程间存在共享资源,其中的临界资源需要特别关注。
临界区是访问共享资源的那段代码。
解决资源竞争的机制是互斥锁,其操作包括:定义互斥锁:pthread_mutex_t mutex;
初始化锁:pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)。
加锁:pthread_mutex_lock(pthread_mutex_t *mutex)。
解锁:pthread_mutex_unlock(pthread_mutex_t *mutex)。
销毁锁:pthread_mutex_destroy(pthread_mutex_t *mutex)。

以下是两个使用互斥锁的示例代码:

展开过程

五、线程间的顺序问题

解决线程间顺序问题的方式是使用信号量,它类似于交通信号灯,可实现线程间有序访问临界资源。


http://www.mrgr.cn/news/407.html

相关文章:

  • BvSP_ Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction
  • P6280 [USACO20OPEN] Exercise G
  • 【Nginx】Nginx 安装(平滑升级和回滚)
  • CSS的:scope伪类:精准定位表格元素的秘籍
  • 【推理技巧】OpenVINO2024 C++ 模型部署技巧合集
  • 【论文写作】核心期刊写作的框架与布局学习笔记
  • 【音视频】FFmpeg 安装
  • 17.3 Django 框架基础
  • git学习使用碰到的问题1
  • libnl教程(2):发送请求
  • golang(gin框架)结合前端h5用户注册(演示版)
  • http request-02-Ajax XHR 的替代方案-fetch 标准
  • Windows部署Mysql且设置对外访问
  • 大模型学习方法之——大模型技术学习路线
  • c#使用Microsoft.Office.Interop.Word提示无法嵌入或操作型“ApplicationClass”。请改用试用的接口。
  • 艺体培训机构业务管理系统--论文pf
  • BLEU、ROUGE详解-语言模型的常用评价指标-举例附代码实现
  • 【人工智能】Python融合机器学习、深度学习和微服务的创新之路
  • 坐牢第二十七天(聊天室)
  • 改善工作流