1. 概述

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

2. 主要内容

  2.1 同步资源

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

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

private static volatile int _flag = ;

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

Interlocked.Increment(ref n); //
Interlocked.Decrement(ref n); //
Interlocked.Exchange(ref isInUse, );
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();
}
}, token); Console.WriteLine("Please enter to stop the task");
Console.ReadLine();
cancellationTokenSource.Cancel();

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

Task longRunning = Task.Run(() =>
{
Thread.Sleep();
}); int index = Task.WaitAny(new[] {longRunning}, ); if (index == -)
Console.WriteLine("Task time out ");

3. 总结

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

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

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

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

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

  1. 第一章 管理程序流(In .net4.5) 之 实现多线程和异步处理

    1. 概述 本章主要讲解.net4.5如何实现多线程和异步处理的相关内容. 2. 主要内容 2.1 理解线程 ① 使用Thread类   public static class Program   { ...

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

    1. 概述 本章包括.net4.5中异常处理相关的部分. 2. 主要内容 2.1 处理异常 ① try.cahtch.finally 机制,无需多言. ② 使用 Environment.FailFas ...

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

    1. 概述 本章内容包括 布尔表达式.流控制方式.集合遍历 以及 流跳转. 2. 主要内容 *由于该章内容比较基础,日常用的也很多,故对一些常用的基础内容不再赘述. 2.1 使用布尔表达式 熟悉下列比 ...

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

    1. 概述 本章讲解如何使用 委托.lambda表达式 和 匿名方法 来创建和使用事件. 2. 主要内容 2.1 理解委托 委托是一种用方法签名形式定义的类型.可以让它指向其他方法,可以通过它调用其他 ...

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

    数据类型 分5类:整数.数值.字符相关.日期时间以及二进制 1.整数 数据库系统 类型 说明 MYSQL tinyint [unsigned] 一个很小的整数.有符号的范围是-128 到127,无符号 ...

  6. File类与常用IO流第二章过滤器

    在第一章中,有一个练习使用递归搜索文件 1 public static void main(String[] args) { 2 File f=new File("E:\\aaa" ...

  7. 第二章 NIO入门

    传统的同步阻塞式I/O编程 基于NIO的非阻塞编程 基于NIO2.0的异步非阻塞(AIO)编程 为什么要使用NIO编程 为什么选择Netty 第二章 NIO 入门 2.1 传统的BIO编程 2.1.1 ...

  8. Stealth视频教程学习笔记(第二章)

    Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  9. 《LINUX内核设计与实现》读书笔记之第一章和第二章

    一.第一章 1. Unix内核的特点简洁:仅提供系统调用并有一个非常明确的设计目的抽象:几乎所有东西都被当做文件可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力进程:创建 ...

随机推荐

  1. 【转】iOS高级向的十道面试问题

    原文:http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技 ...

  2. Codeforces Round #218 (Div. 2) C. Hamburgers

    C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  3. loadrunner11安装与破解

    最近准备学习LR,借助这个平台,将自己的学习经历记录下来,当然很多都不是原创,都是遇到问题时各种百度,然后梳理下知识是为了避免以后遇到同样的错误时,能回过头来参考参考. 下面的是转载某位大神的博客,尊 ...

  4. 消除PyCharm中满屏的波浪线

    PyCharm使用了较为严格的PEP8的检查规则,如果代码命名不规范,甚至多出的空格都会被波浪线标识出来,导致整个编辑器里铺满了波浪线,右边的滚动条也全是黄色或灰色的标记线,很是影响编辑. 在网上看了 ...

  5. 免费的API接口

    有如下三个Json格式的查询天气预报接口: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/dat ...

  6. nginx 完全关闭 access_log

    修改nginx.config access_log off;

  7. 用JS控制图片随鼠标移动

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. .net验证码生成及使用

    验证码的作用: 几年前,大部分网站.论坛之类的是没有验证码的,因为对于一般用户来说验证码只是增加了用户的操作,降低了用户的体验.但是后来各种灌水机器人.投票机器人.恶意注册机器人层出不穷,大大增加了网 ...

  9. Ugly Window 【acm题】

    话说好久没有碰acm题目了.............................. 看到Ugly Window这道题目,没有多想,就直接先找到字母的连续长度和连续高度,并统计该字母的总个数,然后用 ...

  10. js对象的相关操作方法

    //在js的对象中可以直接将一个方法赋值给一个属性,这种方法非常好用. //在js中虽然没有像其他语言中的class关键字,但是我们也可以用函数,字面量的方式来模拟. var myHome={ nam ...