C# 5.0 与 .Net 4.5

Race Conditions资源竞争

如果两个或更多的线程通过同一对象并且共享状态不是同步的,一个资源竞争就可能发生。为了说明资源竞争,下面的例子定义了一个StateObject类,该类包含一个int类型字段和ChangeState方法。在ChangeState方法实现里面,这个状态变量根据是否为5来决定更改值;如果是,这个值自增。接下来的语句Trace.Assert将立即执行验证值是否为6。

为5的变量自增加1后,你可能断定这个变量现在是6,但是在这里它并不是重点。例如,如果一个线程执行了if(state ==5 )语句,调度者运行另一个线程,它可能优先占用资源。第二个线程现在走进了if语句体里面,并且由于这个state还是5这个值,state自增1变成6,第一个线程随后又被调度,并且下一次state自增变成7.这个时候就会发生资源竞争。

public class StateObject
{
  private int state = 5;
  public void ChangeState(int loop)
  {
    if (state == 5)
    {
      state++;
      Trace.Assert(state == 6, "Race condition occurred after " +
      loop + " loops");
    }
    state = 5;
  }
}

你可以为task定义一个的方法。SampleTask类里面的RaceCondition方法获得了一个StateObject作为参数。里面有一个while循环,ChangeState方法被调用。变量i是用来在信息中显示循环次数。

public class SampleTask
{
  public void RaceCondition(object o)
  {
    Trace.Assert(o is StateObject, "o must be of type StateObject");
    StateObject state = o as StateObject;
    int i = 0;
    while (true)
    {
      state.ChangeState(i++);
    }
  }
}

在程序的Main方法里面,一个新的StateObject被创建,它被所有的tasks所共享。通过使用Lambda表达式调用RaceConditions方法创建Task对象。主线程等待用户的输入。然而,这里可能因为资源竞争的发生使得在读取用户输入之前程序停止。

static void RaceConditions()
{
  var state = new StateObject();
  for (int i = 0; i < 2; i++)
  {
    Task.Run(() => new SampleTask().RaceCondition(state));
  }
}

ps:未完,内容是为英文版翻译,非原创,勿喷。无聊中...

时间: 2024-08-06 17:57:28

C# 5.0 与 .Net 4.5的相关文章

鬃嘴释怀说太多就成真不了。

子阻撞砖奏尊仔籽着 释怀说太多就成真不了. http://passport.baidu.com/?business&un=vip&un=%E5%A4%A9%E6%B0%B4%E4%B8%8A%E9%97%A8%E8%BF%99%E5%B0%8F%E5%A7%90#0 http://passport.baidu.com/?business&un=vip&un=%E7%99%BD%E9%93%B6%E4%B8%8A%E9%97%A8%E8%BF%99%E5%B0%8F%E5%A

澜星粘鼐贩逊耐盼系甭妊倏纪傲傲sdfghjk

http://passport.baidu.com/?business&un=R&un=%E5%A4%A7%E5%AE%81%E6%A1%91%E6%8B%BF%E9%80%9A%E5%B0%8F%E5%A7%90#0 http://passport.baidu.com/?business&un=R&un=%E4%B9%A1%E5%AE%81%E6%A1%91%E6%8B%BF%E9%80%9A%E5%B0%8F%E5%A7%90#0 http://passport.bai

在Ubuntu14.04上OpenStack Juno安装部署

在Ubuntu14.04上OpenStack Juno安装部署 0 安装方式 0.1 安装方式 安装方式 说明 目标 备注 单结点 一台服务器运行所有的nova-xxx组件,同时也驱动虚拟实例. 这种配置只为尝试Nova,或者为了开发目的进行安装.   1控制节点+N个计算节点 一个控制结点运行除nova-compute外的所有nova-services,然后其他compute结点运行nova-compute.所有的计算节点需要和控制节点进行镜像交互,网络交互,控制节点是整个架构的瓶颈. 这种配

2008 SCI 影响因子(Impact Factor)

Excel download 期刊名缩写 影响因子 ISSN号 CA-CANCER J CLIN 74.575 0007-9235 NEW ENGL J MED 50.017 0028-4793 ANNU REV IMMUNOL 41.059 0732-0582 NAT REV MOL CELL BIO 35.423 1471-0072 PHYSIOL REV 35.000 0031-9333 REV MOD PHYS 33.985 0034-6861 JAMA-J AM MED ASSOC 3

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

Linux下WebSphereV8.5.5.0 安装详细过程

Linux下WebSphereV8.5.5.0 安装详细过程 自WAS8以后安装包不再区别OS,一份介质可以安装到多个平台.只针对Installation Manager 进行了操作系统的区分 ,Websphere产品介质必须通过专门的工具Install Managere安装.进入IBM的官网http://www.ibm.com/us/en/进行下载.在云盘http://yun.baidu.com/share/linkshareid=2515770728&uk=4252782771 中是Linu

Centos7.2部署.Net Core2.0 WebApi

部署前准备 1.VisualStudio2017+.netcore2.0SDK 2.Centos7.2 3.SecureCRT,Xftp(根据自己喜好) 创建WebApi项目 修改Program.cs中的BuildWebHost方法为(不改也可,core默认使用Kestrel作为Server) public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseKestrel()

Apache Storm 1.1.0 中文文档 | ApacheCN

前言  Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ApacheCN 最近组织了翻译 Storm 1.1.0 中文文档 的活动,整体 翻译进度 为 96%. 感谢大家参与到该活动中来 感谢无私奉献的 贡献者,才有了这份 Storm 1.1.0 中文文档 感谢一路有你的陪伴,我们才可以做的更好,走的更快,走的更远,我们一直在努力 ... 网页地址:

Vue.js系列之项目搭建(vue2.0 + vue-cli + webpack )

1.安装node node.js环境(npm包管理器) cnpm npm的淘宝镜像 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了(傻瓜式安装).安装完成之后,打开命令行工具,输入 node -v,如果出现相应的版本号,则说明安装成功. npm包管理器,是集成在node中的,所以,直接输入 npm -v就会显示出npm的版本信息. 2.安装cnpm 在命令行中输入 npm install -g cnpm --registry=http://registr

Win7 Qt4.8.5+QtCreator2.8.0+mingw配置过程

1:安装包 百度盘下载链接: Mingw: http://pan.baidu.com/share/link?shareid=3960359240&uk=4147081190 Qt Creator 2.8.0: http://pan.baidu.com/share/link?shareid=3964645350&uk=4147081190 Qt 4.8.5: http://pan.baidu.com/share/link?shareid=3968136805&uk=414708119