using System;
using System.Threading;
internal class Program
{
private static long _counter = 1; private static void Main()
{
//下面程序显示两个线程如何并发访问一个名为counter的整形变量,一个线程让他递增5次,一个让他递减5次
Console.WriteLine("原始值:{0}", _counter);
var t1 = new Thread(F1);
var t2 = new Thread(F2);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine("最终值:{0}", _counter);
Console.Read();
} private static void F1()
{
for (int i = 0; i < 5; i++)
{
Interlocked.Increment(ref _counter);//原子性操作
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ff") + " 方法1:counter++:{0}", _counter);
Thread.Sleep(10);
}
} private static void F2()
{
for (int i = 0; i < 5; i++)
{
Interlocked.Decrement(ref _counter);//原子性操作
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ff") + " 方法2:counter--:{0}", _counter);
Thread.Sleep(10);
}
}
}

【进程线程与同步】5.4 System.Threading.Interlocked 为多个线程共享的变量提供原子操作的更多相关文章

  1. C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程

    C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程 这是由ThreadAbortException抛出的 可以写成下面的样子 tr ...

  2. linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁

    Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量.信号量和读写锁. 下面是思维导图:  一.互斥锁(mutex)  锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . ...

  3. C# Synchronized 和 SyncRoot 实现线程同步的源码分析及泛型集合的线程安全访问

    转载:http://blog.csdn.net/zztfj/article/details/5640889 Synchronized vs SyncRoot 我们知道,在.net的一些集合类型中,譬如 ...

  4. 【读书笔记】C#高级编程 第二十一章 任务、线程和同步

    (一)概述 所有需要等待的操作,例如,因为文件.数据库或网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务. 线程是程序中独立的指令流. (二)Paraller类 Paraller ...

  5. 多线程学习系列二(使用System.Threading)

    一.什么是System.Threading.Thread?如何使用System.Threading.Thread进行异步操作 System.Threading.Thread:操作系统实现线程并提供各种 ...

  6. 【C#】C#线程_混合线程的同步构造

    目录结构: contents structure [+] 一个简单的混合锁 FCL中的混合锁 ManualResetEventSlim类和SemaphoreSlim类 Monitor类和同步块 Rea ...

  7. System.Threading

    线程:定义为可执行应用程序中的基本执行单元. 应用程序域:一个应用程序内可能有多个线程. 上下文:一个线程可以移动到一个特定的上下文的实体 导入命名空间: //得到正在执行这个方法的线程 Thread ...

  8. Java多线程之线程的同步

    Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...

  9. 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading

    入门-------------------------------------------------------------------------------- 概述与概念    一个C#程序开始 ...

随机推荐

  1. 使用CURL抓取淘宝页面

    /** * 根据地址抓取淘宝页面html代码 * @param type $url 地址 * @return boolean */ public function getTaoBaoHtml($url ...

  2. 模式匹配之Kmp算法

    Kmp: 算法定义借鉴wikipedia: http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm#KMP_ ...

  3. EF for Oracle 闪退

    EF oracle 加入实体类型时候闪退 主要原因: Oracle.ManagedDataAcces 版本和 SetupODTforVS2015 版本不一致所致. 更新后 SetupODTforVS2 ...

  4. 《windows内核安全与驱动开发》ctrl2cap中的ObReferenceObjectByName疑问

    国内有关于windows内核驱动这块的书籍实在是甚少,不过好在<windows内核安全与驱动开发>这本书还算不错(内容方面),但是不得不说这本书在许多地方存在着一些细节上的问题.比如我今天 ...

  5. Code Simplicity

    https://www.codesimplicity.com/post/code-simplicity-the-science-of-software-development/ 下载地址: https ...

  6. 通过logstash收集mysql慢查询日志转换为json

    input { file { type => "mysql-slow" path => "/var/log/slow_mysqld.log" sta ...

  7. vc2005(visual studio)使用习惯记录

    来源:http://blog.csdn.net/zdl1016/article/details/6184549 前言:sourceinsight不支持显示utf-8的文件, 实在是一大遗憾!vim现在 ...

  8. IDEA/Pycharm/Webstorm项目目录中的 Scratches and Consoles作用

    临时的文件编辑环境,通过临时的编辑环境,你可以写一些文本内容或者一些代码片段. 参考:https://segmentfault.com/a/1190000014202363 https://www.w ...

  9. API Monitor---------------Using API Monitor to crack copy protected software

    For this tutorial we will be using Mirial Softphone which is a HD video conferencing application. Th ...

  10. 又学到一个词REPL

    A read–eval–print loop (REPL), also known as an interactive toplevel or language shell 指的是 交互式解释器.