前言 volatile 关键字 三种常用等待 再说自旋和阻塞 SpinWait 结构 属性和方法 自旋示例 新的实现 SpinLock 结构 属性和方法 示例 等待性能对比 前面我们学习了很多用于线程管理的 类型,也学习了多种线程同步的使用方法,这一篇主要讲述线程等待相关的内容。 在笔者认真探究多线程前,只会new Thread;锁?Lock;线程等待?Thread.Sleep()。 前面已经探究了创建线程的创建姿势和各种锁的使用,也学习了很多类型,也使用到了很多种等待方法,例如 Thread.Sleep()、Th…

2020年4月26日 0条评论 3257点热度 0人点赞 痴者工良 阅读全文

本篇的内容主要是介绍 ReaderWriterLockSlim 类,来实现多线程下的读写分离。 ReaderWriterLockSlim ReaderWriterLock 类:定义支持单个写线程和多个读线程的锁。 ReaderWriterLockSlim 类:表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。 两者都是实现多个线程可同时读取、只允许一个线程写入的类。 ReaderWriterLockSlim 老规矩,先大概了解一下 ReaderWriterLockSlim 常用的方法。 常用方法…

2020年4月25日 0条评论 3202点热度 2人点赞 痴者工良 阅读全文

前言 这一篇,我们将学习用于实现并行任务、使得多个线程有序同步完成多个阶段的任务。 应用场景主要是控制 N 个线程(可随时增加或减少执行的线程),使得多线程在能够在 M 个阶段中保持同步。 线程工作情况如下: 我们接下来 将学习C# 中的 Barrier ,用于实现并行协同工作。 Barrier 类 使多个任务能够采用并行方式依据某种算法在多个阶段中协同工作,使多个线程(称为“参与者” )分阶段同时处理算法。 可以使多个线程(称为“参与者” )分阶段同时处理算法。(注意算法这个词) 每个参与者完成阶段任务后后将被阻…

2020年4月25日 0条评论 2843点热度 0人点赞 痴者工良 阅读全文

方法一: csproj文件中,加上 方法二: .runtimeconfig.json 文件加上 { "runtimeOptions": { "configProperties": { "System.Globalization.Invariant": true } } } /* "configProperties": { "System.Globalization.Invariant": true } */ [......] 继续阅读

2020年4月22日 1条评论 5167点热度 3人点赞 痴者工良 阅读全文

解决一个问题 CountdownEvent 类 构造函数和方法 示例 解决一个问题 假如,程序需要向一个 Web 发送 5 次请求,受网路波动影响,有一定几率请求失败。如果失败了,就需要重试。 示例代码如下: class Program { private static int count = 0; static void Main(string[] args) { for (int i = 0; i { HttpReques[......]继续阅读

2020年4月19日 0条评论 2792点热度 0人点赞 痴者工良 阅读全文

区别与示例 ManualResetEvent 类 ManualResetEventSlim 区别与示例 AutoResetEvent 和 ManualResetEvent 十分相似。两者之间的区别,在于前者是自动(Auto),后者是手动(Manua)。 你可以先运行下面的示例,再测试两者的区别。 AutoResetEvent 示例: class Program { // 线程通知 private static AutoResetEvent resetEvent = new AutoResetEvent(false)…

2020年4月19日 0条评论 2873点热度 0人点赞 痴者工良 阅读全文

AutoRestEvent 类 常用方法 一个简单的示例 解释一下 复杂一点的示例 解释 回顾一下,前面 lock、Monitor 部分我们学习了线程锁,Mutex 部分学习了进程同步,Semaphor 部分学习了资源池限制。 这一篇将学习 C# 中用于发送线程通知的 AutoRestEvent 类。 AutoRestEvent 类 用于从一个线程向另一个线程发送通知。 微软文档是这样介绍的:表示线程同步事件在一个等待线程释放后收到信号时自动重置。 其构造函数只有一个: 构造函数里面的参数用于设置信号状态。 构造函…

2020年4月19日 0条评论 3312点热度 0人点赞 痴者工良 阅读全文

Semaphore 类 示例 示例说明 信号量 SemaphoreSlim类 示例 区别 两者都可以限制同时访问某一资源或资源池的线程数。 这里先不扯理论,我们从案例入手,通过示例代码,慢慢深入了解。 Semaphore 类 这里,先列出 Semaphore 类常用的 API。 其构造函数如下: 构造函数 说明 Semaphore(Int32, Int32) 初始化 Semaphore 类的新实例,并指定初始入口数和最大并发入口数。 Semaphore(Int32, Int32, String) 初始化 Semap…

2020年4月18日 2条评论 3591点热度 0人点赞 痴者工良 阅读全文

Mutex 类 构造函数和方法 系统只能运行一个程序的实例 解释一下上面的示例 接替运行 进程同步示例 另外 Mutex 类 Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。 互斥锁(Mutex),用于多线程中防止两条线程同时对一个公共资源进行读写的机制。 Windows 操作系统中,Mutex 同步对象有两个状态: signaled:未被任何对象拥有; nonsignaled:被一个线程拥有; Mutex 只能在获得锁的线程中,释放锁。 构造函数和方法 Mutex 类其构造函数如…

2020年4月18日 0条评论 3272点热度 1人点赞 痴者工良 阅读全文

本章主要讲述多线程竞争下的原子操作。 知识点 竞争条件 线程同步 CPU时间片和上下文切换 阻塞 内核模式和用户模式 Interlocked类 1,出现问题 2,Interlocked.Increment() 3,Interlocked.Exchange() 4,Interlocked.CompareExchange() 5,Interlocked.Add() 6,Interlocked.Read() 知识点 竞争条件 当两个或两个以上的线程访问共享数据,并且尝试同时改变它时,就发生争用的情况。它们所依赖的那部分共…

2020年4月18日 0条评论 3689点热度 0人点赞 痴者工良 阅读全文

1,Lock lock 原型 lock 编写实例 2,Monitor 怎么用呢 解释一下 示例 设置获取锁的时效 C# 中,可以使用 lock 关键字和 Monitor 类来解决多线程锁定资源和死锁的问题。 官方解释:lock 语句获取给定对象的互斥 lock,执行语句块,然后释放 lock。 下面我们将来探究 lock 关键字和 Monitor 类的使用。 1,Lock lock 用于读一个引用类型进行加锁,同一时刻内只有一个线程能够访问此对象。lock 是语法糖,是通过 Monitor 来实现的。 Lock 锁…

2020年4月17日 1条评论 3127点热度 0人点赞 痴者工良 阅读全文

public IConfigurationRoot Config { get; } = new ConfigurationBuilder() .SetBasePath(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Options")) .AddJsonFile("SystemConfig.json", optional: true, reloadOnChange: true) .Build(); [......] 继续阅读

2020年4月16日 0条评论 2836点热度 0人点赞 痴者工良 阅读全文

下面是一张图片的 base64 编码 下面代码是很久前写的了,暂时不改,为了速度,请修改字符串操作部分的代码。 /// /// base64转为图片存储到本地 /// /// /// /// public static async Task ImageToFile(string base64,string imagesPath) { if (String.IsNullOrEmpty(base64)) return null;[......]继续阅读

2020年4月16日 0条评论 3993点热度 0人点赞 痴者工良 阅读全文

解决方法: 使用 RandomNumberGenerator 来生成随机数。 https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.randomnumbergenerator?view=netcore-3.1 [......] 继续阅读

2020年4月16日 0条评论 3395点热度 0人点赞 痴者工良 阅读全文

目录 1,获取当前线程信息 2,管理线程状态 2.1 启动与参数传递 2.1.1 ParameterizedThreadStart 2.1.2 使用静态变量或类成员变量 2.1.3 委托与Lambda 2.2 暂停与阻塞 2.3 线程状态 2.4 终止 2.5 线程的不确定性 2.6 线程优先级、前台线程和后台线程 2.7 自旋和休眠 本篇是《多线程入门和实践(初级)》的第一篇,也是大家相当熟悉和不屑的的最简单的入门部分。作为系列文章,笔者将从最简单的部分开始,与各位伙伴一起不断学习和探究 C# 中的多线程。 对于…

2020年4月15日 0条评论 3356点热度 3人点赞 痴者工良 阅读全文

文章内容有知识点提示时: 提示:111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111。 提示:如果需要处理的算法比较简单的话,可以直接写进委托中,不需要另外写方法啦。 提示: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…

2020年4月12日 0条评论 2886点热度 0人点赞 痴者工良 阅读全文

Reimage Repair 是一个非常强大的工具,能够诊断系统问题,修复系统。 对于 windows 10 更新时碰到的各种错误,使用此软件可以很容易地修复系统。 以管理员权限打开cmd,输入 SFC/scannow 也可以扫描系统。 使用 dism /online /cleanup-image /restorehealth 可以修复系统。 [......] 继续阅读

2020年4月4日 0条评论 3969点热度 5人点赞 痴者工良 阅读全文

[5分钟]菜鸟修研之设计模式:六大设计原则 [TOC] 笔者作为一个菜鸟,会尝试以简单的代码和容易理解的语句去解释这几种原则的特性和应用场景。 这六种原则分别为单一职责原则、接口隔离原则、里氏替换原则、迪米特法则、依赖倒置原则、开闭原则。 单一职责原则 单一职责原则(SRP:Single responsibility principle),规定一个类中应该只有一个原因引起类的变化。 单一职责原则的核心就是解耦和增强内聚性。 问题: // 假设此类是数据库上下文 public class DatabaseContex…

2020年4月4日 0条评论 2980点热度 1人点赞 痴者工良 阅读全文

Startup 中,添加一个变量 readonly string ganweiCosr = "AllowSpecificOrigins"; Startup.ConfigureServices 中,添加服务 #if CORS services.AddCors(options => { options.AddPolicy(ganweiCosr, builder => builder.AllowAnyHeader()[......]继续阅读

2020年4月3日 0条评论 6054点热度 7人点赞 痴者工良 阅读全文

新建一个静态类吗,注入 dapper 服务。 /// <summary> /// 注入dapper /// </summary> public static class DapperService { /// <summary> /// 注入dapper /// </summary> public static IServiceCollection AddDapperContext(this IServiceCollection service[......]继续阅读

2020年4月3日 0条评论 4935点热度 6人点赞 痴者工良 阅读全文
1151617181927