第二章 管理程序流(In .net4.5) 之 管理多线程

1. 概述

  本章包括同步资源以及取消长时间任务相关的内容。

2. 主要内容

  2.1 同步资源

    ① lock关键字实现。会阻塞程序,有可能会导致死锁。

    ② volatile关键字可以禁用编译优化,用于避免优化代码时对多线程的影响。

private static volatile int _flag = 0;

    ③ Interlocked关键字可以原子化一些简单数字运算和比较替换操作。

Interlocked.Increment(ref n); //
Interlocked.Decrement(ref n); //
Interlocked.Exchange(ref isInUse, 1);
Interlocked.CompareExchange(ref value, newValue, compareTo);

  2.2 取消任务

    ① CancellationToken

CancellationTokenSource cancellationTokenSource =
    new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token; 

Task task = Task.Run(() =>
{
    while(!token.IsCancellationRequested)
    {
        Console.Write("*");
        Thread.Sleep(1000);
    }
}, token);

Console.WriteLine("Please enter to stop the task");
Console.ReadLine();
cancellationTokenSource.Cancel();

    ② 使用Task.WaitAny()可以设置任务的超时时间。

Task longRunning = Task.Run(() =>
{
    Thread.Sleep(10000);
});

int index = Task.WaitAny(new[] {longRunning}, 1000);

if (index == -1)
    Console.WriteLine("Task time out ");

3. 总结

  ① 多线程环境访问共享数据时,要考虑避免数据的损坏和脏读。

  ② 使用lock关键字可以实现共享资源的多线程顺序访问。

  ③ 可以使用Interlocked实现简单的原子操作。

  ④ 可以使用CancellationTokenSource类的CancellationToken来控制取消任务。

时间: 2024-07-30 00:20:31

第二章 管理程序流(In .net4.5) 之 管理多线程的相关文章

第五章 管理程序流(In .net4.5) 之 异常处理

1. 概述 本章包括.net4.5中异常处理相关的部分. 2. 主要内容 2.1 处理异常 ① try.cahtch.finally 机制,无需多言. ② 使用 Environment.FailFast 方法,可以立即终止程序,并写入系统事件日志.会绕过finally的执行. public static void Main() { string s = Console.ReadLine(); try { int i = int.Parse(s); if (i == 42) Environment

第三章 管理程序流(In .net4.5) 之 实现程序流

1. 概述 本章内容包括 布尔表达式.流控制方式.集合遍历 以及 流跳转. 2. 主要内容 *由于该章内容比较基础,日常用的也很多,故对一些常用的基础内容不再赘述. 2.1 使用布尔表达式 熟悉下列比较运算符:>, <, >=, <=, ==, !=. 熟悉下列逻辑表达式:&&, ||, ^. bool a = true; bool b = false; Console.WriteLine(a ^ a); //false Console.WriteLine(a ^

第四章 管理程序流(In .net4.5) 之 事件和回调

1. 概述 本章讲解如何使用 委托.lambda表达式 和 匿名方法 来创建和使用事件. 2. 主要内容 2.1 理解委托 委托是一种用方法签名形式定义的类型.可以让它指向其他方法,可以通过它调用其他方法. ① 委托支持多播(multicasting),可以用 + 和 += 操作符绑定多个方法到委托中(用 - 和 -= 取消绑定). public void Method1() {} public void Method2() {} public delegate void Del(); publ

第一章 管理程序流 之 实现多线程和异步处理

1. 概述 本章主要讲解.net4.5如何实现多线程和异步处理的相关内容. 2. 主要内容 2.1 理解线程 ① 使用Thread类   public static class Program   {       public static void ThreadMethod()       {           for (int i = 0; i < 10; i++)           {               Console.WriteLine(“ThreadProc: {0}”,

第二章 生成、打包、部署和管理应用程序及类型

1. 概述 本章重点解释如何生成仅供自有应用程序使用的程序集. 2. 名词解释 ① 响应文件:是一个文本文件(扩展名rsp),包含一组编译器命令行开关.执行CSC.exe时可以直接读取并应用这些开关. 3. 主要内容 3.1 部署目标 ① 解决 DLL hell. ② 解决 安装时的复杂性. ③ 增强 安全性. 3.2 将类型生成到模块中 ① CSC.exe 3.3 元数据概述 元数据是一个二进制数据块,由几个表组成.这些表分为三个类别:定义表.引用表和清单表. ① 常用的定义表:ModuleD

SQL笔记-第二章,数据表的创建和管理

数据类型 分5类:整数.数值.字符相关.日期时间以及二进制 1.整数 数据库系统 类型 说明 MYSQL tinyint [unsigned] 一个很小的整数.有符号的范围是-128 到127,无符号的范围是0 到255. smallint [unsigned] 一个小整数.有符号的范围是-32768到32767,无符号的范围是0 到65535. mediumint [unsigned] 一个中等大小整数.有符号的范围是-8388608到8388607,无符号的范围是0到16777215. in

第二章 生成丶打包丶部署和管理应用程序及类型

目录: 2.1 .NET Framerwork部署目标 2.2 将类型生成到模块中 2.3 元数据概述 2.4 将模块合并成程序集 2.5 程序集版本资源信息 2.6 语言文化 2.7 简单应用程序部署(私有部署的程序集) 2.8 简单管理控制(配置) 2.1 .NET Framework部署目标 Windows 多年来一直因为不稳定和过于复杂而口碑不佳. 有及方面原因.首先所有应用程序都要使用动态链接库(Dynamic-Link Library,DLL) 1.安装新应用程序时,它可能莫名奇妙破

【网络原理】期末复习笔记 第二章 物理层

第二章 物理层 2.1物理层的基本概念 物理层定义:解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体. 物理层的主要任务为:确定与传输媒体的接口的特性 机械特性:接口形状,大小,引线数目 功能特性:电压强度决定信号大小 电器特性 :规定电压范围 过程特性:建立连接时各个相关部件的工作步骤. 2.2 通讯模型(通讯的目的是传递数据) 信息:文字/图片/视频 数据:信息在传输之前需要编码,编码之后的信息就是数据 信号:数据在通信线路上传递需要变成光信号.电信号 码元:时间间隔

Delphi知识点与技术概述【第二章 核心类库】

第三章 核心类库 Delhpi可视化编程依赖于庞大的巨型类库.Delphi 标准类库包含了数百个类以及数以千计的方法. 内容提要: *RTL包.CLX与VCL CLX用作linux中,VCL用作Windows中 VCL是一个独立的大型库(组件,控件,非可视组件,数据集合,数据感应控件,等等). 库的核心非可视化组件与类属于RTL包. Vcl结构: CLX结构: BaseCLX VisualCLX DateCLX NetCLX 库的VCL专用部分: VCL还提供了Windows专用的: Delph