c# 多线程学习笔记
飘零雁
软件工程师
展开
-
Async Await 异常处理
Async 方法有三种可能的返回类型: Task、Task<T> 和 void,但是 async 方法的固有返回类型只有 Task 和 Task<T>。 当从同步转换为异步代码时,任何返回类型 T 的方法都会成为返回 Task<T> 的 async 方法,任何返回 void 的方法都会成为返回 Task 的 async 方法。 返回 void 的 async 方法具有特定用途: 用于支持异步事件处理程序。(参考 https://docs.microsoft.com/zh-原创 2020-09-21 23:56:30 · 4022 阅读 · 0 评论 -
Async Await 工作流程和作用
从多线程最常用的场景模式说起。比如下面的一段代码, 函数中需要从远程获取数据, 这个过程可能需要10多秒或者更长,甚至网络可能断了。那么调用这个函数的界面将“死卡”住。只要编程语言支持多线程,这个问题便可以解决。便能构建所谓的响应式程序。所以很多文档说async, await 是为了构建响应式程序。在我看来,并不如此,就是在c# 支持Task之前,就可以使用比较底层的Thread对象,但是需要创建线程,启动线程,停止线程等操作。除了这些步骤之后,因为线程是内核对象,管理不善,很容易在程序退.原创 2020-09-16 09:24:12 · 496 阅读 · 0 评论 -
c# 多线程学习笔记(三)原子操作
先由一道问题来说明这个问题。以下多线程对int型变量x的操作,哪几个不需要进行同步A. x=y; B. x++; C. ++x; D. x=1; 从上一节对“同步”概念的介绍得知,同步是指多个线程对资源的访问保证一定的顺序。以上四个操作都是对资源x的访问,那么问题相当于是对x访问操作能不能保证有序的。如果选项是一个不可分离的操作,那么多线程的访问就不需要同原创 2016-08-16 11:08:37 · 7015 阅读 · 1 评论 -
c# 多线程学习笔记(二)互斥,同步
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源,如“第一类读写者模型”。通过以下题目来说明互斥与同步:程序描述:原创 2016-08-16 10:08:31 · 1096 阅读 · 0 评论 -
c# 多线程学习笔记 (一)基本概念
面试中总不可避免的会问到一些多线程的问题。尽管项目中也会实践一些,但是一方面可能也是不全面,另一方面如果时间太久了,可能有些处理问题的规则也会忘记。利用这段时间把多线程的问题分以下几个方面加以整理。因为我目前主要是用c#语言,因此一些实践例子也用c#来实现。以下文章主要参考了http://blog.csdn.net/morewindows/article/details/7392749博客原创 2016-08-16 09:56:34 · 464 阅读 · 0 评论 -
c# 多线程学习笔记(四)生产者消费者问题
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关原创 2016-08-22 11:00:24 · 2352 阅读 · 0 评论 -
c# 多线程学习笔记(五)读者写者问题
问题描述读者写者也是一个非常著名的同步问题,也叫共享独占锁。问题描述非常简单,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件。因此要求:①允许多个读者可以同时对文件执行读操作;②同时只允许一个写者往文件中写信息;③任一写者在完成写操作之前不允许其他读者或写者工作;④写者执行写操作前,应让已有的读者和写者全部退出。原创 2016-08-23 16:11:55 · 1139 阅读 · 2 评论