
并行任务
文章平均质量分 78
q__y__L
学习方向是大数据,模式识别。。。微
展开
-
C# 通过回调获取多线程中的结果
答案是传递一个回调函数。看具体的例子,假设我有一个求自然数的累加和函数,我想让一个线程单独运行,且返回结果。在C#中多线程运行一旦开启,是没办直接返回你要的结果的,但有时候我们确实需要线程给我们结果要怎么做呢?这个类不仅接受参数Number,还接受一个回调函数:Action.在计算完成前将结果传递给回调函数。这里只是简单地打印,事实上还可以将取值拿出来,做法类似于上一节提到的。原创 2023-10-13 12:10:52 · 611 阅读 · 0 评论 -
C# 往多线程传递安全参数的方法
这样,在执行时,我们向多线程传递的是类PassParameter。sToThread的成员函数,且没有任何参数。这样就实现了安全的将参数传递到线程中。为此要如何避免这种问题呢?原创 2023-10-13 11:41:30 · 432 阅读 · 0 评论 -
再说多线程(六)——Thread生命周期
前面一直在用Thread介绍多线程任务,本节对线程类Thread的生命周期进行简单的梳理。原创 2023-02-10 15:57:14 · 770 阅读 · 0 评论 -
再说多线程(五)——死锁
在前面四节中,我们一直没有讨论多线程程序的一个负面问题——死锁,有了一定的基础,现在是时候研究一下死锁了。死锁一定是出现在多线程程序中,单线程是不可能造成死锁的,因为你不可能同时加两把锁。死锁有个简单的例子,假设你和你的邻居关系很好,你们相互放了一把备用钥匙在对方家里,一般来说,只要有一个人带了钥匙,那两个人一定可以各回各家,但是恰好有一天,两人出门都忘记带钥匙,回家时发现对方在门口等着,两个人只能干瞪眼。这就是死锁。原创 2023-01-13 16:40:00 · 704 阅读 · 0 评论 -
再说多线程(四)——Semaphore类
C#中的信号量类用于限制可以同时访问共享资源的外部线程的数量。换句话说,我们可以说Semaphore允许一个或多个外部线程进入临界区并在线程安全的情况下并发执行任务。因此,在实时情况下,当我们的资源数量有限并且我们想限制可以使用它的线程数量时,我们需要使用信号量。翻译 2023-01-13 11:15:20 · 849 阅读 · 0 评论 -
再说多线程(三)——Mutex类
在前面2节,我们已经讨论了Lock语句和Monitor类,Locks 和 Monitors 确保 InProcess 线程的线程安全,即由应用程序本身生成的线程,即内部线程。但是,如果线程来自 OutProcess,即来自外部应用程序,那么 Locks 和 Monitors 将无法控制它们。而 Mutex 确保进程外线程的线程安全,即由外部应用程序生成的线程,即外部线程。可能前面一段是说的不是很明白,什么是内部进程和外部进程呢?让我们首先创建一个控制台应用程序,然后将以下代码复制并粘贴到其中。翻译 2023-01-13 09:29:15 · 1315 阅读 · 2 评论 -
再说多线程(二)——细说Monitor类
1. Monitor.Wait 方法有两个比较常用的方法重载:Object:等待的锁的对象功能:释放当前线程所占用的对象锁,并且阻塞当前的线程直到它再次拥有这个锁。- Object:等待的锁的对象- Int32:线程再次进入就绪队列的等待时长,单位毫秒功能:释放当前线程所占用的对象锁,并且阻塞当前的线程直到它再次拥有这个锁。如果指定的时长过去,线程将由等待队列转移到就绪队列。2. Monitor.Wait 方法的主要执行步骤阻塞当前的线程将这个线程移动到等待队列中释放当前的同步锁。原创 2023-01-12 14:09:38 · 1169 阅读 · 0 评论 -
再说多线程(一)
世界是并行!做过复杂项目的朋友一定遇到过并发的问题,无论是大项目如订票系统,还是小项目中的文件管理都会有并行需求。所以不同于上学时接触的大部分代码,实际的业务往往是为多人提供服务,必然天然的带有并发的需求。这里我先不解释并行和并发的区别,也不去讨论cpu和操作系统的低层是如何做到并发的,让我们从最简单的串行说起。一个简单的打印函数,只不过,在两句话之间,添加了一个小停顿。原创 2023-01-11 16:30:38 · 396 阅读 · 0 评论 -
C# 两个线程轮流打印
要想两个线程轮流打印,最常见的办法是加一个锁,每当该线程获取到锁后就打印,然后释放锁,让另一个线程打印,但锁也有它的局限性,比如,如果有四个线程,两两轮流使用,可能就需要2个锁,这不是一个好办法,这里介绍一个C#内置的工具:Semaphore,即信号量的意思。是操作系统原始提供的内核同步对象。Semaphore semaphoreObject = new Semaphore(initialCount: 0, maximumCount: 5);解释一下意思:第一个参数为:initialCoun原创 2022-04-13 00:59:33 · 753 阅读 · 0 评论 -
.Net基于任务的异步编程(笔记)
本文是阅读微软官方教程——基于任务的异步编程,做的笔记,以备日后参考。目录1.概述2.隐式创建和运行任务3.显示创建和运行任务3.1 使用Task类的构造函数创建任务3.2 使用Task.Run函数创建并运行任务3.3 使用TaskFactory.StartNew 创建并运行任务3.4 使用Result属性返回运行结果3.5 使用Lambda创建任务3.6 ...翻译 2019-08-09 15:52:00 · 799 阅读 · 0 评论