C# 5.0 与 .Net 4.5 学习(三)Interlocked

Interlocked类是用于对变量进行原子操作的简单语句。如i++不是线程安全,它从内存中获得一个值,然后将这个值加1,然后又将值存回到内存中。这些操作可能被线程调度器中断。Interlocked类就提供了对增、减、改、读的方法的线程安全行为。

使用Interlocked类比其他同步技术更快捷。然而,你只能在简单的同步问题上去使用它。

例如,当赋予someState变量新值时以防值为null我们不使用lock锁,而选择使用更快捷的Interlocked类(代码文件SynchronizationSamples/SharedState.cs):

lock (this)
{
  if (someState == null)
  {
    someState = newState;
  }
}
Interlocked.CompareExchange<SomeState>(ref someState,
newState, null);

使用lock方式:

public int State
{
    get
    {
        lock (this)
        {
            return ++state;
        }
    }
}

 Interlocked方式:

public int State
{
    get
    {
        return Interlocked.Increment(ref state);
    }
}    
时间: 2024-08-25 15:33:45

C# 5.0 与 .Net 4.5 学习(三)Interlocked的相关文章

Spring3.0官网文档学习笔记(五)--3.3

3.3 概述 Table 3.1. The bean definition Property Explained in... class Section 3.3.2, "Instantiating beans" name Section 3.3.1, "Naming beans" scope Section 3.5, "Bean scopes" constructor arguments Section 3.4.1, "Dependen

Spring3.0官网文档学习笔记(六)--3.4.1

3.4 依赖 3.4.1 依赖注入 依赖注入两种方式:基于构造器的DI.基于setter方法的DI. 3.4.1.1 基于构造器的DI 参数是引入对象,且之前不存在父-子类关系: package x.y; public class Foo { public Foo(Bar bar, Baz baz) { // ... } } <beans> <bean id="foo" class="x.y.Foo"> <constructor-arg

Spring3.0官网文档学习笔记(七)--3.4.2

3.4.2 依赖与配置的细节 3.4.2.1  Straight values (primitives, Strings, and so on) JavaBeans PropertyEditors被用来转换这些value到实际的类型.? <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <

Spring3.0官网文档学习笔记(四)--3.1~3.2.3

3.1 Spring IoC容器与Beans简介 BeanFactory接口提供对任意对象的配置: ApplicationContext是BeanFactory的子接口,整合了Spring Aop功能,消息资源控制,事件发布,应用层特殊的上下文(在web应用中) 由IoC容器实例化.组装.管理的对象都是Bean 3.2 容器概述 org.springframework.context.ApplicationContext代表Spring IoC容器,并且负责通过读取配置元数据来实例化.配置.组装

Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6

3.4.3 使用depends-on 使用depends-on可以强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用",".";"." "隔开. <bean id="beanOne" class="ExampleBean" depends-on="manager"/> <bean id="manager" cla

SunSonic 3.0 ORM开源框架的学习

SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接在此)系列的随笔接触到的,本文章学习内容源于AllEmpty大神. SubSonic就是一个ORM开源框架.作者是Robe Conery,用C#语言写的.其中包含了T4模板可以快速生成数据层实体类,这是一个实用的快速开发框架.让开发人员原理SQL语句的拼接,专注于业务逻辑的实现.SubSonic 3.0支持MsSql.MySql与SQLite三种数据库,对数据库操作灵

Spring3.0官网文档学习笔记(二)

1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包) spring-*.jar *号代表的是模块的简写,如:spring-core, spring-webmvc, spring-jms 可以在四个不同的地方找到Spring: http://www.springsource.org/downloads/community  所有的jar包被打包成zip,名称从3.0开始是: org.spring

Spring3.0官网文档学习笔记(一)

Part 1 Spring框架概述 Spring是模块化的,在应用中只需要引入你所需要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web service访问你的逻辑,还有许多种方式保存数据. spring被设计成非侵入式的. 1.Spring框架简介 Spring框架提供了应用开发的基础部分,使得我们可以集中精神在业务开发层上. POJOS:plain old Java objects Spring允许创建非侵入式的POJO.这个特性支持Ja

Asp.net core 2.0.1 Razor 的使用学习笔记(六)

Asp.net core 2.0.1 Razor 的使用学习笔记——基本页面的建立 VS这版(vs版本:15.5.6  .net版本:4.7.02558)的Razor页面自动生成就是坑爹货,它自动生成的页面真是能坑死你不带商量的.到处错误,到处bug.不过相信微软最终是会修复的. 以下是Bug的具体情况,不关心的朋友可以直接跳过. 正常来说,创建的快捷方式是: 1.Pages右键>添加>新建文件夹>xxxx 2.xxxx右键>添加>Razor页面>使用实体框架生成Raz

Jetty学习三:配置概览-需要配置什么

上一节讲述了怎么配置Jetty,这节将告诉你使用Jetty你需要配置些什么. 配置Server Server实例是Jetty服务端的中心协调对象,它为所有其他Jetty服务端组件提供服务和生命周期管理.在标准Jetty发布中,核心的服务端配置是在etc/jetty.xml文件中,你也能在其中包含其他服务端配置,可以包括: 1)ThreadPool Server实例提供了一个线程池,你可以在etc/jetty.xml中配置最大线程数和最小线程数. 2)Handlers Jetty服务端只能有一个H