最近在阅读《c#高级编程》 这本书。记录一下关于锁的使用

大致分为三种方法:

方法1:使用 lock

方法2:使用 Interlocked

方法3:使用 Monitor

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static void Main(string[] args){int numTasks = 20;var state = new SharedState();var tasks = new Task[numTasks];for (int i = 0; i < numTasks; i++){tasks[i] = Task.Run(() => new Job(state).DoTheJob());}for (int i = 0; i < numTasks; i++){tasks[i].Wait();}Console.WriteLine("summarized {0}", state.State);Console.ReadLine();}}public class SharedState{private int state = 0;private object syncRoot = new object();public int State{get { return state; }}public int IncrementState(){//方法1:使用interlocked //return Interlocked.Increment(ref state);//方法2:使用lock//lock (syncRoot)//{//    state++;//    return state;//}//方法3:使用MonitorMonitor.Enter(syncRoot);try{state++;return state;}finally{Monitor.Exit(syncRoot);}//Monitor的其他用法:等待超过超时时间就不等了//bool lockTaken = false;//Monitor.TryEnter(syncRoot, 500, ref lockTaken);//if (lockTaken)//{//    try//    {//        //do something//    }//    finally//    {//        Monitor.Exit(syncRoot);//    }//}//else//未获得锁//{//    //do something else//}}}public class Job{SharedState sharedState;public Job(SharedState sharedState){this.sharedState = sharedState;}public void DoTheJob(){for (int i = 0; i < 5000; i++){sharedState.IncrementState();}}}
}

  

转载于:https://www.cnblogs.com/aitong/p/10796293.html

c# 线程,同步,锁相关推荐

  1. 线程同步锁 java_java多线程同步之重入锁,详细解析

    上次已经为大家介绍过java多线程同步,Volatile详解的主要内容了.今天再来为大家介绍一些相关的内容,也就是java多线程同步之重入锁,一起来了解一下吧. 使用重入锁实现线程同步 在JavaSE ...

  2. python线程同步锁_Python实现的多线程同步与互斥锁功能示例

    本文实例讲述了Python实现的多线程同步与互斥锁功能.分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 import threading i ...

  3. @Java | Thread synchronized - [ 线程同步锁 基本使用]

    对实现了Runnable或者Callable接口类,可以通过多线程执行同一实例的run或call方法,那么对于同一实例中的局部变量(非方法变量)就会有多个线程进行更改或读取,这就会导致数据不一致,sy ...

  4. python线程同步锁_[python] 线程间同步之Lock RLock

    为什么需要同步 同样举之前的例子,两个线程分别对同一个全局变量进行加减,得不到预期结果,代码如下: total = 0 def add(): global total for i in range(1 ...

  5. python 线程锁_Python3多线程执行任务含线程同步锁

    Python启动多线程执行任务,用线程锁实现同步分配任务,最后等待所有线程执行完毕#python3多线程演示 import threading import random import time to ...

  6. java同步锁售票_线程同步锁之火车站售票案例

    前言: 谈到多线程,就不得不说线程同步,那么什么是线程同步? 线程同步 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作 ...

  7. 【并发】线程同步——锁Lock与synchronized比较

    一.简单使用Lock锁 Java 5中引入了新的锁机制--java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lo ...

  8. Java 中线程同步锁和互斥锁

    一 概述 1.1 互斥 所谓互斥,就是不同线程,通过竞争进入临界区(共享的数据和硬件资源),为了防止访问冲突,在有限的时间内只允许其中之一独占性的使用共享资源.如不允许同时写. 1.2 同步 同步关系 ...

  9. Java中线程同步锁和互斥锁有啥区别?看完你还是一脸懵逼?

    首先不要钻概念牛角尖,这样没意义. 也许java语法层面包装成了sycnchronized或者明确的XXXLock,但是底层都是一样的.无非就是哪种写起来方便而已. 锁就是锁而已,避免多个线程对同一个 ...

  10. java线程锁为什么要唯一,java线程同步-锁 - 谁说这么长又没有中心思想还与个人技术主题无关的的标题是胡闹??? - OSCHINA - 中文开源技术交流社区...

    1.synchronized 用在方法和代码块上有什么区别呢? synchronized 用在方法签名上(以test为例),当某个线程调用此方法时,会获取该实例的对象锁,方法未结束之前,其他线程只能去 ...

最新文章

  1. C++ 设计员工类(Employee)
  2. C++一级与二级指针基础详解
  3. sql union 与多个order by 一起使用
  4. OAuth 2.1 的进化之路
  5. python显示文件夹图片_如何显示文件夹中的随机图片(Python)
  6. 使用Cross-Page Postback(跨页面提交)在页面间传递数据
  7. 【Python】pip模块管理Python包的常用方法
  8. 三星Samsung笔记本电脑开机进入BIOS的方法与BIOS设置全功能菜单(F2)
  9. docker swarm
  10. 菜单向上拉html,模拟select控件,CSS上拉菜单
  11. 通过代理下载Google Code
  12. 音视频中的帧I 帧,B帧,P帧,IDR帧理解
  13. grub4dos linux iso,Grub4Dos仿真ISO启动CDlinux省可用内存的方法
  14. Bochs、虚拟软盘与BootLoader
  15. 最全SysML 教程
  16. meta http-equiv=Content-Type content=text/html; charset=gb2312设置中文显示
  17. pacemaker做nginx高可用
  18. 拿Python当作计算器
  19. 手势识别系统的发展前景
  20. 涉密资质是什么?有哪些好处

热门文章

  1. matcom , 连接matlab和Microsoft visual studio
  2. mysql导入分卷_php实现mysql备份恢复分卷处理的方法_PHP
  3. python不能处理excel文件-别以为Python的pandas不能处理非规范Excel数据
  4. python基础知识面试题-深入解答关于Python的11道基本面试题
  5. python脚本实例手机端-手机APP自动签到-python实现 - 运维之路
  6. python整理excel数据-Python 之Excel 数据处理
  7. 快速排序 python菜鸟教程-Python菜鸟文本处理4种方法
  8. mapreduce编程实例python-Python模拟MapReduce的流程
  9. python第三方库大全win-Python标准库、第三方库和外部工具汇总
  10. 我在学python-你们以为我在学C++?其实我在学 Python