当前位置: 首页 > 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.lryc.cn/news/425379.html

相关文章:

  • eNSP 华为三层交换机实现VLAN间通信
  • 【多模态大模型】LLaMA in arXiv 2023
  • (转)java中restful接口和普通接口的区别
  • 灵办AI免费ChatGPT4人工智能浏览器插件快速便捷(多功能)
  • VulnHub:BlueMoon
  • 处理filter里抛出的异常
  • IndexedDB深度解析:JavaScript的客户端数据库
  • C语言中的函数指针和返回值为数组的函数指针对比
  • 根据字符串的长度和字符值的大小来对字符串切片进行排序
  • RabbitMQ 的工作原理
  • WPF 资源、引用命名空间格式、FrameworkElement、Binding、数据绑定
  • vue3-03-创建响应式数据的几种方法
  • stm32智能颜色送餐小车(openmv二维码识别+颜色识别+oled显示)
  • 对接的广告平台越多,APP广告变现的收益越高?
  • LINUX原始机安装JDK
  • MR400D工业级带网口4G DTU:RS232/RS485 TO LTE深度测评
  • 第四范式发布AI+5G视频营销产品 助力精准获客与高效转化
  • DVWA-IDS测试(特殊版本)
  • 轻度自闭症的温柔启航:星启帆的康复之旅
  • 一、OpenTK简介
  • Dom4j详细介绍
  • thissuper
  • cv::normalize()
  • 【Python快速入门和实践016】Python常用脚本-对视频抽取指定帧数并保存
  • [Linux CMD] 目录与文件相关的命令
  • redis面试(十三)公平锁排队代码剖析
  • 冷热数据拆分
  • JavaScript 基础(四)
  • 《机器学习by周志华》学习笔记-神经网络-01神经元模型
  • C#中常用的扩展类