C# 独立线程

文章目录

    • 前言
      • 使用多线程注意事项:
        • 1.线程安全性:
        • 2.线程同步:
        • 3.避免主线程的耗时操作:
        • 4.使用线程池:
        • 5.注意线程的生命周期管理:
        • 6.正确处理线程间通信:
        • 7.考虑线程的优先级和调度:了解操作系统对线程的调度策略,合理设置线程的优先级,确保关键线程能够优先执行。
        • 8.异常处理:
  • 一、 线程的概念
    • 1.1 进程(Process)
    • 1.2 线程(Thread)
    • 2. 线程的状态
    • 3. 线程的优势
    • 4. 线程的劣势
  • 二、代码举例
    • 1. 创建和启动线程
    • 2. 停止线程
    • 3. 线程同步
    • 4. 线程间通信
    • 5. 线程优先级
    • 6. 异步编程
    • 7. 线程池
    • 三.创建4个简易独立线程
  • 总结


前言


使用多线程注意事项:

1.线程安全性:

多线程编程中,由于线程共享内存空间,因此需要注意线程安全性。如果多个线程同时访问和修改同一份数据,可能会导致数据不一致或出现竞态条件。为了确保线程安全,可以使用同步机制,如互斥锁(mutex)、条件变量、信号量等来控制对共享数据的访问。

2.线程同步:

线程同步是确保线程间有序执行的关键。通过同步机制,可以防止多个线程同时访问共享资源,造成数据混乱或死锁。

3.避免主线程的耗时操作:

主线程通常负责处理用户界面更新等任务,如果主线程被耗时操作阻塞,会导致用户界面卡顿。因此,应避免在主线程中执行耗时操作,如网络请求、数据库操作等,而应将这些操作放到子线程中执行。

4.使用线程池:

使用线程池可以复用线程,减少线程的创建和销毁开销,提高应用性能。线程池中的线程可以根据需要动态创建和销毁,有效管理资源。

5.注意线程的生命周期管理:

当不再需要线程时,应及时停止线程,释放相关资源,避免线程泄漏。

6.正确处理线程间通信:

在多线程编程中,线程间可能需要通过共享变量、消息队列等方式进行通信。确保通信的安全性和正确性,避免竞态条件或死锁。

7.考虑线程的优先级和调度:了解操作系统对线程的调度策略,合理设置线程的优先级,确保关键线程能够优先执行。
8.异常处理:

多线程编程中,线程间的异常处理尤为重要。应确保线程能够妥善处理异常情况,避免程序崩溃或数据损坏。

一、 线程的概念

1.1 进程(Process)

定义:进程是操作系统进行资源分配的基本单位,每个进 程拥有独立的内存空间和系统资源。
特点:
每个进程有一个唯一的进程标识符(PID)。
进程之间相互独立,互不影响。
进程之间的通信通常需要通过进程间通信(IPC)机制,如管道、消息队列、共享内存等。

1.2 线程(Thread)

定义:线程是进程内的执行单元,是操作系统能够进行运算调度的最小单位。
特点:
同一个进程内的线程共享该进程的内存空间和资源。
线程之间的通信和同步相对简单,因为它们共享相同的内存空间。
线程的创建和切换开销比进程小得多。

2. 线程的状态

线程在其生命周期中会经历不同的状态。常见的线程状态包括:

+-----------------+
|     新建         |
|  (New)          |
+-----------------+|v
+-----------------+
|     就绪         |
|  (Ready)        |
+-----------------+|v
+-----------------+
|     运行         |
|  (Running)      |
+-----------------+|   \|    \|     \ (等待资源)v      v
+-----------------+  +-----------------+
|     阻塞         |  |     阻塞         |
|  (Blocked)      |  |  (Waiting)      |
+-----------------+  +-----------------+|                 || (资源可用)       | (条件满足)v                 v
+-----------------+  +-----------------+
|     运行         |  |     运行         |
|  (Running)      |  |  (Running)      |
+-----------------+  +-----------------+|                 |v                 v
+-----------------+  +-----------------+
|     终止         |  |     终止         |
|  (Terminated)   |  |  (Terminated)   |
+-----------------+  +-----------------+

图解说明

  • 新建 (New):
    线程对象已创建,但尚未调用 Start 方法。
    线程还没有开始执行。
  • 就绪 (Ready):
    线程已准备好运行,但由于其他线程正在运行而等待调度。
    线程处于可运行状态,等待 CPU 调度。
  • 运行 (Running):
    线程正在 CPU 上执行。
    线程可以执行其任务。
  • 阻塞 (Blocked):
    线程在等待某个条件满足(如资源可用)之前无法继续执行。
    例如,线程可能在等待 I/O 操作完成或等待锁的释放。
  • 等待 (Waiting):
    线程在等待某个特定条件满足(如事件发生)之前无法继续执行。
    例如,线程可能在等待 Monitor.Wait 或 WaitHandle.WaitOne。
  • 终止 (Terminated):
    线程执行完毕或由于某种原因被终止。
    线程不再执行任何任务,资源被释放。
  • 转换关系
    新建 -> 就绪:调用 Start 方法后,线程从新建状态进入就绪状态。
    就绪 -> 运行:当 CPU 调度到该线程时,线程从就绪状态进入运行状态。
    运行 -> 阻塞/等待:线程在等待资源或特定条件时,从运行状态进入阻塞或等待状态。
    阻塞/等待 -> 运行:当资源可用或条件满足时,线程从阻塞或等待状态重新进入运行状态。
    运行 -> 终止

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划 —— dp问题-按摩师

1. 按摩师 题目链接: 面试题 17.16. 按摩师 - 力扣(LeetCode)https://leetcode.cn/problems/the-masseuse-lcci/description/ 2. 算法原理 状态表示:以某一个位置为结尾或者以某一个位置为起点 dp[i]表示:选择到i位置…

【react】基础知识点学习

1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件,App.js为根组件。 如何将react应用挂载在页面上? 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…

word及Excel常见功能使用

最近一直在整理需规文档及表格,Word及Excel需要熟练使用。 Word文档 清除复制过来的样式 当复制文字时,一般会带着字体样式,此时可选中该文字 并使用 ctrlshiftN 快捷键进行清除。 批注 插入->批注,选中文本 点击“批注”…

在Microsoft Outlook日历中添加多个时区

在Microsoft Outlook日历中添加多个时区 1.单击Outlook中的文件选项卡,单击选项 2.左侧菜单中选择日历 3.向下滚动到时区部分,并标记当前时区,比如China 4.选中“显示第二个时区”框 5.选择第二个时区并给它一个标签,比如Germa…

vue组件在项目中的常用业务逻辑(3)

获取完后台接口数据后,需将数据在页面中进行动态展示。 一、在getters中简化数据: 二、在search>index.vue中写计算属性,实现将接口的goodsList模块数据展示在vue的search上: 三、1.用v-for循环数据,一共十个&…

从传感器到清洁力提升,灵途科技推动家电智能化发展

双十一第一波预售刚结束,第二波预售活动又火热开启。得益于政府补贴和平台优惠的双重带动,扫地机等高端智能家电需求暴增。 今年,各大电商平台不再单纯追求“全网最低价”,而是在低价基础上注重提升用户的综合体验。家电机器人品…

基于STM32的智能温室环境监测与控制系统设计(代码示例)

一、项目概述 在现代农业中,智能大棚能够通过环境监测、数据分析和自动控制等技术手段,实现对作物生长环境的精细化管理。本项目旨在设计一个基于STM32单片机的智能大棚系统,能够实时监测光照强度、空气温湿度及土壤湿度,并根据设…

详解CRC校验原理以及FPGA实现

文章目录 一、什么是CRC校验?二、实现CRC校验原理以及步骤2.1 用多项式表示二元码数据2.2 选择一个生成多项式作为校验2.3 计算CRC校验码 三、CRC判断数据是否错误的原理以及步骤3.1 将收到的数据与生成多项式求余3.2 数据发生错误再进行CRC校验判断 四、FPGA实现CR…

大模型学习笔记------CLIP模型解读与思考

大模型学习笔记------CLIP模型解读与思考 1、为什么提出CLIP模型2、CLIP模型详解3、CLIP模型的重要意义 上文已经讲到,我认为多模态的大模型是最有前途的大模型,首先学习的就是CLIP这个模型。 CLIP(Contrastive Language-Image Pretraining&…

《IMM交互式多模型滤波MATLAB实践》专栏目录,持续更新……

专栏链接:https://blog.csdn.net/callmeup/category_12816762.html 专栏介绍 关于IMM的例程 双模型EKF: 【逐行注释】基于CV/CT模型的IMM|MATLAB程序|源代码复制后即可运行,无需下载三模型EKF: 【matlab代码】3个模型的IMM例程&…

【UART异步串口协议及verilog实现】

UART异步串口协议 1 UART1.1 数据格式1.2 波特率 2 UART的发送和接收模块2.1 uart发送模块2.2 uart的接收模块 【博客首发于微信公众号《 漫谈芯片与编程》】 本篇文章介绍常用的芯片外围低速协议:UART; 1 UART UART是异步串行传输协议,即…

TS-AWG控制电光调制器:推动科技应用新发展的利器

一、电光调制有什么用? 如今,基于光学、光子学和脉冲激光以及电光调制器的应用正变得极为流行,最新一代科学家正在为其实际应用开辟新领域,如汽车激光雷达、医疗解决方案、航空航天和国防、量子和激光传感器。 测试挑战、上市时…

ros与mqtt相互转换

vda5050 VDA5050协议介绍 和 详细翻译-CSDN博客 ros与mqtt相互转换 如何转换的,通过某个中转包,获取ros的消息然后以需要的格式转换为mqtt 需要的参数 ros相关 parameters[ (ros_subscriber_type, vda5050_msgs/NodeState), (ros_subscriber_queue…

探讨 | 大模型在传统NLP任务的使用姿势

以chatgpt为起始节点的大模型技术经过了两年左右的发展,大致沉淀了一些较为确定的研究领域。首先是基座大模型的研究,主要是国内外大厂集中大量财力、人力、算力进行大模型军备竞赛,企图将大模型的基础能力(包括推理能力&#xff…

C语言 — 指针的进阶

文章目录 前言一、字符指针二、指针数组三、数组指针数组名 与 &数组名 四、指针传参二维数组传参 五、函数指针结语 前言 通过前面的关于指针的学习,我们了解了指针的一些个特性。本篇文章我们将深入指针,挖掘指针更深处的知识。 在开始之前&#…

Ceisum无人机巡检视频投放

公司投标内容有个视频投放的功能动画,原本想实现这么一个效果: 案例效果来自别人的展示作品,Leader一眼就相中了这个效果,可惜别人的终究是别人的,又不会白白给你,终究是要自己动手尝试。 动画方面的展示…

Redis为什么用跳表实现有序集合

Redis为什么用跳表实现有序集合 手写一个跳表 为了更好的回答上述问题以及更好的理解和掌握跳表,这里可以通过手写一个简单的跳表的形式来帮助读者理解跳表这个数据结构。 我们都知道有序链表在添加、查询、删除的平均时间复杂都都是 O(n) 即线性增长&#xff0c…

ubuntu双屏只显示一个屏幕另一个黑屏

简洁的结论: 系统环境 ubuntu22.04 nvidia-535解决方案 删除/etc/X11/xorg.conf 文件 记录一下折腾大半天的问题。 ubuntu系统是22.04,之前使用的时候更新驱动导致桌面崩溃,重新安装桌面安装不上,请IT帮忙,IT一番操作过后也表示…

Docker可视化管理面板DPanel的安装

本文软件由网友 rui 推荐; 什么是 DPanel ? DPanel 是一款 Docker 可视化管理面板,旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能,使用户能够更轻松地管理和部署 Docker 环境。 软件特点: 可视化管理&…

学习threejs,使用对象组合

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Object3D 三维物体 二…