C# 等值锁定
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace FZJ.Lock
{
/// <summary>
/// 等值锁定
/// 锁定给定内容
/// 内容必须实现IComparable接口,若Comparable比较两个对象是同一个值,
/// 则在相等对象上执行的操作是同步的
/// 实际上未对给定对象进行锁定,在外部可以调用lock等
/// </summary>
public class EquivalentLock<T> where T : IComparable<T>
{
Dictionary<T, Semaphore> t2Event = new Dictionary<T, Semaphore>(); System.Threading.SpinLock sl = new SpinLock();
/// <summary>
/// 进入锁定内容
/// </summary>
/// <param name="lockObj">被锁定的内容</param>
public void Enter(T lockObj)
{
bool lockTaken = false;
sl.Enter(ref lockTaken);
if (!t2Event.ContainsKey(lockObj))
{
t2Event.Add(lockObj, new Semaphore(, ));
}
sl.Exit();
t2Event[lockObj].WaitOne();
}
/// <summary>
/// 退出锁定内容
/// </summary>
/// <param name="lockObj">锁定的内容</param>
public void Exit(T lockObj)
{
if (!t2Event.ContainsKey(lockObj))
{
throw new KeyNotFoundException();
}
t2Event[lockObj].Release();
}
/// <summary>
/// 释放存储资源
/// </summary>
public void Free()
{
t2Event.Clear();
}
}
}
方法调用方式。
class Program
{
static void Main(string[] args)
{ EquivalentLock<string> stringLock = new EquivalentLock<string>(); for (int i = ; i < ; i++)
{
new Thread(() =>
{
string ss = new string('', ); int threadHashCode = System.Threading.Thread.CurrentThread.GetHashCode();
Console.WriteLine(threadHashCode + "尝试进来");
stringLock.Enter(ss);
//do something
Console.WriteLine(threadHashCode + "进来");
Thread.Sleep();
Console.WriteLine(threadHashCode + "出来");
stringLock.Exit(ss); }).Start();
} Console.WriteLine("是否释放资源?(y/n)");
string isFree = Console.ReadLine();
if (isFree == "y")
{
stringLock.Free();
}
Console.Read();
}
}
C# 等值锁定的更多相关文章
- 记录一下MySql update会锁定哪些范围的数据
目录 1.背景 2.前置知识 2.1 数据库的隔离级别 2.2 数据库版本 2.3 数据库的存储引擎 2.4 锁是加在记录上还是索引上 2.5 update...where加锁的基本单位是 2.6 行 ...
- ECS Linux 服务器解除ssh登陆后被锁定或暂停输入输出的终端
在使用SSH终端(如Xshell)登陆时,若不慎点击 Ctrl + S 按键,会导致终端很像被锁定,输入和输出都无响应. 这是由于操作系统的终端收到指令 Ctrl + S 后,会暂停终端输入输出的刷 ...
- NPOI导出数据,设置格式,锁定单元格
代码包括: 1:导出多个sheet 2:设置单元格格式 3:合并单元格 4:下拉框选项 5:输入数字限制 6:锁定单元格 static void Main(string[] ar ...
- 文件共享锁定数溢出-IWorkspaceEdit.StopEditing
在批量保存Feature至本地mdb的时候,当Feature的数量超过一定的值(该值不确定是不是Access文件的MaxLocksPerFile值,因为当MaxLocksPerFile为9500时,F ...
- Android中锁定文件的方法
androidSDK中并没有锁定文件相关的api. 但是android是基于linux操作系统的,linux比较底层,灵活性也更大,为了实现锁定文件的效果,大概有以下几种办法: 用chmod命令修改文 ...
- UWP Composition API - 锁定列的FlexGrid
需求是第一列锁定,那么怎么让锁定列不跟着滚动条向做移动呢? 其实很简单,让锁定列跟scrollviewer的滚动做反方向移动. 先看一下这个控件的模板,嗯,其实很简单,就是ListView的模板,不同 ...
- Vmware无法获取快照信息 锁定文件失败
今天早上起来发现虚拟机崩了: 造成原因: 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动, 会提示:锁定文件失败,打不开磁盘或快照所依赖的磁盘: 这是因为虚拟机在运行的时候 ...
- Python3.5 Day1作业:实现用户密码登录,输错三次锁定。
作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3. ...
- Oracle账户解锁/锁定
1. 首先用系统账号登录: sqlplus /nolog conn /as sysdba 2. 输入命令对账户解锁/锁定: ALTER USER scott ACCOUNT UNLOCK ALTER ...
随机推荐
- (转)MySQL高可用解决方案
MySQL高可用解决方案 原文:http://www.ywnds.com/?p=5565 有这么两个概念,数据库的可靠性和数据库的可用性,可靠性指的是数据可靠,而可用性指的是服务可用.但是不管是可靠性 ...
- Ejb3.0+jboss 8 创建EJB demo
工具:Eclipse , wildfly 8.x 1.服务端: 1)创建接口 package com.welv.ejb; public interface FirstEjb { public Stri ...
- Getway网关管理ZUUL
1.ZUUL微服务网关 微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService.ProductService.UserService...,为了让调用更简单,一般会在这些服 ...
- IPC之AIDL&binder关系
binder是一个远程对象的基础类,核心部分是远程调用机制,这部分是由IBinder定义的.它是对IBinder类的实现,其中IBinder类提供这样一个类的标准的本地化实现方式. 大多数开发者不会去 ...
- HUE配置文件hue.ini 的pig模块详解(图文详解)(分HA集群和非HA集群)
不多说,直接上干货! 一.默认的pig配置文件 ########################################################################### ...
- JavaScript数据结构-18.图结构广度优先和最短路径
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CI中使用log4php调试程序
下载log4php.我下载的版本是:apache-log4php-2.3.0-src.zip.借压缩,将压缩文件中的src/main/php/文件夹拷贝到CI的application/thrid_pa ...
- 学生信息管理系统(C语言版本)
这是我个人写的一个学生管理系统,这是我仅仅用来练手的代码,要知道链表可是你在面试过程中最大机率会考到的,我是陆续从单向链表入门,然后采用双向链表写的代码!如有BUG,请指正,让我们共同进步! 1 #i ...
- java调用ruby代码
问题: 最近在做一个应用的时候碰到了一个问题.客户端需要调用服务器端传回的脚本信息,然后执行.其中脚本类型包括ruby.而java中调用ruby的代码大致如下: String jrubyCode=&q ...
- java并发编程(4)性能与可伸缩性
性能与可伸缩性 一.Amdahl定律 1.问题和资源的关系 在某些问题中,资源越多解决速度越快:而有些问题则相反: 注意:每个程序中必然有串行的部分,而合理的分析出串行和并行的部分对程序的影响极大:串 ...