C#学习记录-线程
线程
定义:Thread t = new Thread(Test); //可以用匿名 lamda
调用:t.Start("ljc6666");方法可以无参或一个参数,如果要传入多个参数,可以传入一个结构体
namespace _17_线程Thread
{internal class Program{static void Test(){Console.WriteLine("1");Thread.Sleep(3000);//子线程等3sConsole.WriteLine("2");}struct Data{public int Value;public int Value2;}static void show(object o){Data op = (Data)o;Console.WriteLine("给我什么打印什么:"+ op.Value + op.Value2.ToString());}delegate void TestDelegate();static void Main(string[] args){//Thread t = new Thread(Test);//t.Start();//Thread.Sleep(1000);//主线程等1s//Console.WriteLine("3");//Thread t = new Thread(() => Console.WriteLine("拉姆达表达式线程,线程id为:"+Thread.CurrentThread.ManagedThreadId));//t.Start();//Thread t = new Thread(delegate ()//{// Console.WriteLine("匿名表达式线程,线程id为:" + Thread.CurrentThread.ManagedThreadId);//});//t.Start();//Console.WriteLine("主线程,线程id为:" + Thread.CurrentThread.ManagedThreadId);Data data = new Data();data.Value = 1;data.Value2 = 2;Thread t = new Thread(show);//t.Start("ljc6666");t.Start(data);}}
}
前后台线程
namespace _18_前台后台线程
{internal class Program{static void Test(){Console.WriteLine(Thread.CurrentThread.Name+"线程开启");Thread.Sleep(1000);Console.WriteLine(Thread.CurrentThread.Name+"线程结束");}static void Main(string[] args){Thread thread = new Thread(Test);thread.IsBackground = true; //设置为后台线程//thread.IsBackground = false; //设置为前台线程thread.Start();Console.WriteLine("主线程结束");}}
}
线程优先顺序以及状态
namespace _19_线程优先级和状态
{internal class A{}internal class Program{static void A(){int i = 0;bool flag = true;while (flag){i++;Console.Write("a:"+i+" ");if (i>200000 )flag = false;}}static void B(){int i = 0;bool flag = true;while (flag){i++;Console.Write("b:" + i + " ");if (i > 200000)flag = false;}}static void C(){int i = 0;bool flag = true;while (flag){i++;Console.Write("c:" + i + " ");if (i > 200000)flag = false;}}static void Main(string[] args){Thread a = new Thread(A);Thread b = new Thread(B);Thread c = new Thread(C);a.Priority = ThreadPriority.Highest;b.Priority = ThreadPriority.Lowest;a.Start();b.Start();a.Join();Console.WriteLine("a线程结束");b.Join();Console.WriteLine("b线程结束");}}
}
线程池
namespace _20_线程池
{internal class Program{static void Download(object s){for (int i = 0; i <3;i++){Console.WriteLine("线程"+Thread.CurrentThread.ManagedThreadId+"正在下载");Thread.Sleep(100);}}static void Main(string[] args){for(int i = 0; i < 10;i++) {ThreadPool.QueueUserWorkItem(Download);}Thread.Sleep(5000);}}
}
任务
任务有两种启动方式,需要注意的是 任务是后台线程
连续任务
namespace _21_任务
{internal class Program{static void DownLoad(){Console.WriteLine("正在下载,请等待...");Thread.Sleep(1000);}static void Ok(object a){Console.WriteLine("下载完成");}static void Main(string[] args){//TaskFactory tf = new TaskFactory();//Task T = tf.StartNew(DownLoad);//Task t = new Task(DownLoad);//t.Start();Task t1 = new Task(DownLoad);Task t2 = t1.ContinueWith(Ok);t1.Start();Thread.Sleep(1500);//任务是后台线程}}
}
资源访问冲突问题
当有多个地方同时访问一个资源时,可能会导致资源冲突(例如一个变量被多个地方使用),此时可以用锁的方式防止被多次调用
缺点:运行速度会降低
namespace _22_资源访问冲突问题
{internal class Class1{private object _lock = new object();private int state = 5;public void changestate() {lock (_lock){if (state == 5){state++;Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "状态为:" + state);}state = 5;}}}internal class Program{static void Main(string[] args){Class1 c1 = new Class1();for (int i = 0; i < 100; i++) {Thread thread = new Thread(c1.changestate);thread.Start();}}}
}
死锁问题
有多个锁的时候需要注意锁的先后顺序,下面这个讲的很好
408-多线程的死锁问题_哔哩哔哩_bilibili
相关文章:
C#学习记录-线程
线程 定义:Thread t new Thread(Test); //可以用匿名 lamda 调用:t.Start("ljc6666");方法可以无参或一个参数,如果要传入多个参数,可以传入一个结构体 namespace _17_线程Thread {internal class Program{stati…...

Spring Boot 启动注解分析
虽然我们在日常开发中,Spring Boot 使用非常多,算是目前 Java 开发领域一个标配了,但是小伙伴们仔细想想自己的面试经历,和 Spring Boot 相关的面试题都有哪些?个人感觉应该是比较少的,Spring Boot 本质上还…...
React Native数据存储
最近做RN开发中需要数据存储,查阅RN官方资料,发现推荐我们使用 AsyncStorage,对使用步骤做一下记录。 AsyncStorage是什么 简单的,异步的,持久化的key-value存储系统AsyncStorage在IOS下存储分为两种情况: 存储内容较…...

【网络编程】揭开套接字的神秘面纱
文章目录 1 :peach:简单理解TCP/UDP协议 :peach:2 :peach:网络字节序 :peach:3 :peach:socket编程接口 :peach:3.1 :apple:socket 常见API :apple:3.2 :apple:sockaddr结构:apple: 4 :peach:简单的UDP网络程序 :peach:4.1 :apple:基本分析:apple:4.2 :apple:udpServer.hpp(重点…...
MySQL 8.0 事务定义和基本操作
MySQL 事务(Transaction)的四大特性:A、C、I、D A、原子性:(Atomicity) 一个事务是不可分割的最小工作单位。 执行的事务,要么全部成功,要么回滚到执行事务之前的状态。 C、一致…...
项目经理必备:常用的项目管理系统推荐!
当我们成为项目负责人时,找到合适的工具来管理跟进项目,就成为了迫切需要解决的问题。一款优秀的工具,在项目的管理跟进中,起着极为重要的作用,一般可以付费购买专门的项目管理软件。 1.可快速切换查看不同角度的项目信…...
【香瓜说职场】信任危机(2022.08.19)
自从17年4月份开始辞职创业,已经5年零4个月了。今天跟大家聊一点不太正能量的事。 首先关于“要不要说些不好的”这件事,我爸妈常建议我不要把不好的事情写出来,因为觉得丢人、不体面、怕影响合伙人关系、影响同事关系。而我觉得如果只写好的…...

【Rust】Rust学习 第六章枚举和模式匹配
本章介绍 枚举(enumerations),也被称作 enums。枚举允许你通过列举可能的 成员(variants) 来定义一个类型。首先,我们会定义并使用一个枚举来展示它是如何连同数据一起编码信息的。接下来,我们会…...

Win10安装GPU支持的最新版本的tensorflow
我在安装好cuda和cudnn后,使用pip install tensorflow安装的tensorflow都提示不能找到GPU, 为此怀疑默认暗转的tensorflow是不带GPU支持的。 在tensorflow官网提供了多个版本的GPU支持的windows的安装包 https://www.tensorflow.org/install/pip?hlz…...
20个Golang自动化DevOps库
探索 20 个用于简化任务和提高生产力的重要库。 Golang,也称为 Go,是一种静态类型、编译型编程语言,由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 设计。它于 2009 年推出,旨在解决其他编程语言的缺点,特…...

【WiFi】WiFi 6E最新支持的国家和频段
信道Map图 国家和频段 CountryStatus Spectrum Andorra Adopted Considering 5945-6425 MHz 6425-7125 MHz ArgentinaAdopted5925-7125 MHzAustralia Adopted Considering 5925-6425 MHz 6425-7125 MHz Austria Adopted Considering 5945-6425 MHz 6425-7125 MHz BahrainA…...
如何使用html,包括css,js 画思维导图?有哪些可用的方法?
首先,创建一个新的HTML文件,可以使用任何文本编辑器。在文件中添加必要的标签和结构来定义网页的内容和布局。 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Mind Map</title><link re…...

机器学习---梯度下降代码
1. 归一化 # Read data from csv pga pd.read_csv("pga.csv") print(type(pga))print(pga.head())# Normalize the data 归一化值 (x - mean) / (std) pga.distance (pga.distance - pga.distance.mean()) / pga.distance.std() pga.accuracy (pga.accuracy - pg…...

【VB6|第23期】原来Jet.OLEDB也可以读取新版.xlsx的Excel文件
日期:2023年8月11日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方…...

通过控制ros节点的启停,软实现人工控制和紧急停止功能的图示
通过控制ros节点的启停,软实现人工控制和紧急停止功能的图示 实现原理简介: 人工控制的节点: 键盘节点 方向盘节点 自动控制的节点: movebase 导航 autoware 等 底盘节点: 差速底盘 阿克曼底盘 控制节点࿱…...

面试热题(滑动窗口最大值)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 输入:nums [1,3,-1,-3,5,3,6,7], k 3 输出:[3,3,5,…...

【代码】表格封装 + 高级查询 + 搜索 +分页器 (极简)
一、标题 查询条件按钮(Header) <!-- Header 标题搜索栏 --> <template><div><div class"header"><div class"h-left"><div class"title"><div class"desc-test">…...

ant.design 组件库中的 Tree 组件实现可搜索的树: React+and+ts
ant.design 组件库中的 Tree 组件实现可搜索的树,在这里我会详细介绍每个方法,以及容易踩坑的点。 效果图: 首先是要导入的文件 // React 自带的属性 import React, { useMemo, useState } from react; // antd 组件库中的,输入…...

Linux系统编程之信号(上)
一、信号概念 信号就是软件中断。每当程序收到一个信号,都需要按指定的方法去处理。以下是UNIX系统的信号表。 其中core表示产生一个复制了该进程内存映像的core文件,它保存了程序现场,可以使用gdb来调试。 二、signal() signal()函数用于改…...
23.Netty源码之内置解码器
highlight: arduino-light Netty内置的解码器 在前两节课我们介绍了 TCP 拆包/粘包的问题,以及如何使用 Netty 实现自定义协议的编解码。可以看到,网络通信的底层实现,Netty 都已经帮我们封装好了,我们只需要扩展 ChannelHandler …...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...