学习
实践
活动
工具
TVP
写文章

并发编程如何使用锁保护多个资源

上一篇我们知道受保护资源和锁之间合理的关联关系应该是N:1的关系,也就是说一个锁可以保护多个资源,并不能多把锁来保护一个资源,今天我们就说说如何实现一把锁保护多个资源. 保护没有关联关系的多个资源 在现实生活中,球场的座位和电影院的座位是没有关联的,这种场景非常容易解决,那就是球场有球场的门票,电影院有电影的门票 同样,在编程的世界里,也是同样的原理,比如,银行业务的针对账户余额的取款操作 ,各自管理各自的资源 class Account { // 锁:保护账户余额 private final Object balLock = new Object(); // 账户余额 private ,例如我们可以用this这一把锁来管理账户所有资源,只要给多有方法添加synchronized,就可以了 但是用一把锁保护所有资源,性能方便太差,所有的资源操作都是必须串行进行的,而我们用两把锁,取款和修改密码是可以并行的 ,用不同锁对受保护资源进行精细化管理,能够提升性能,这个锁的名字叫细粒度锁 保护有关联关系的多个资源 多个资源有关联,是不容处理的,比如,三个账户A,B,C,我们在账户A里减少100元,给账户B加100

20530

Identity Server 4 - Hybrid Flow - 保护API资源

这个系列文章介绍的是Identity Server 4 的 Hybrid Flow, 前两篇文章介绍了如何保护MVC客户端, 本文介绍如何保护API资源. 在上面流程走完之后, MVC客户端获得了Access Token, MVC客户端验证Access Token并成功后, 就可以使用Access Token来访问被保护的API资源了, 而Access Token 会在被保护的API那里再次进行验证. 无论如何现在访问Country资源是需要授权的. 回到MVC客户端, 在Home的Contact Action里调用CountryAPI资源: ? ? 下面测试一下未使用Access Token访问被保护的Country资源的情况, 重新操作可以看到用户同意授权页面出现了刚才配置的API资源名: ?

35920
  • 广告
    关闭

    2022腾讯全球数字生态大会

    11月30-12月1日,邀您一起“数实创新,产业共进”!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Ids4实战】分模块保护资源API

    ,总结来说: 之前我们是一个客户端只能针对一个资源服务器来操作,那该资源服务器下的所有api都会被保护,当然也都会被控制。 但是现在做了细化以后,一个资源服务器可以分隔出多个作用域Scope,那这样的话,我们就可以定义多个客户端,分模块的去访问同一个统一的资源服务器。 这里先不要着急的抬杠这么扩展的好处和优劣点,等到自己有需要,或者自己有这样的需求的时候就明白了,本文不做解释,只是一把梭的讲解如何配置三端,从而满足分模块保护资源API的目的。 1、Blog.Idp认证中心配置 首先我们需要定义一个单独的资源服务器作用域,然后将这些作用域配置到资源上: // v4更新 public static IEnumerable<ApiScope> GetApiScopes 那就剩下最后一步了,配置资源服务器,既然使用到了作用域Scope,那就需要针对具体的作用域,配置具体的策略方案。

    16520

    共享资源那么多,如何用一把锁保护多个资源

    写在前面 当我们要保护单个资源并对其进行修改其实很简单,只需按照下图分三步走 创建受保护资源 R 的锁 加锁进入临界区 解锁走出临界区 ? 上图的关键是「R1 的锁保护 R1」的指向关系是否正确 如果都是保护单个资源这样简单,程序猿的世界该有多美好,可惜并不是,通常我们需要保护多个资源 保护多个资源 保护多个没有关系的资源 如果多个资源没有关系 ,那就是保护一个资源模型的复制,同样非常简单,且看下图: ? 银行取款操作对应的资源是「余额」, 修改密码操作对应的资源是「密码」,余额和密码两个资源完全没有关系,所以各自用自家的锁保护自家的资源就好了 如果多个资源没有关系,程序猿的世界该有多美好,可惜并不是,我们保护资源多数情况都有关联关系 我们通常容易忽略锁和资源的指向关系,我们想当然的用锁 this 来保护 target 资源了,也就没有起到保护作用 假设 A,B,C 账户初始余额都是 200 原,A 向 B 转账 100,B 向 C

    26520

    共享资源那么多,如何用一把锁保护多个资源

    写在前面 上一篇文章原子性问题的宏观理解 带领大家了解了锁和资源的模型,有了这篇文章的铺垫,相信理解这一篇文章就非常轻松了 当我们要保护单个资源并对其进行修改其实很简单,只需按照下图分三步走 创建受保护资源 上图的关键是「R1 的锁保护 R1」的指向关系是否正确 如果都是保护单个资源这样简单,程序猿的世界该有多美好,可惜并不是,通常我们需要保护多个资源 保护多个资源 保护多个没有关系的资源 如果多个资源没有关系 ,那就是保护一个资源模型的复制,同样非常简单,且看下图: ? 银行取款操作对应的资源是「余额」, 修改密码操作对应的资源是「密码」,余额和密码两个资源完全没有关系,所以各自用自家的锁保护自家的资源就好了 如果多个资源没有关系,程序猿的世界该有多美好,可惜并不是,我们保护资源多数情况都有关联关系 我们通常容易忽略锁和资源的指向关系,我们想当然的用锁 this 来保护 target 资源了,也就没有起到保护作用 假设 A,B,C 账户初始余额都是 200 原,A 向 B 转账 100,B 向 C

    37220

    LiteOS内核教程05 | 互斥锁(共享资源保护

    互斥锁 在多任务环境下,往往存在多个任务竞争同一共享资源的应用场景,互斥锁可被用于对共享资源保护从而实现独占式访问。 互斥锁的使用方式 多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的,需要任务进行独占式处理。 互斥锁怎样来避免这种冲突呢? 在任意时刻,互斥锁的状态只有两种:开锁和闭锁。 那么,当一个互斥锁为加锁状态时,此时其他任务如果想访问这个公共资源则会被阻塞,直到互斥锁被持有该锁的任务释放后,其他任务才能重新访问该公共资源,此时互斥锁再次上锁,如此确保同一时刻只有一个任务正在访问这个公共资源 ,保证了公共资源操作的完整性。 动手实验 —— 使用互斥锁进行资源保护 实验内容 本实验中将创建两个任务,一个低优先级任务task1,一个高优先级任务task2,两个任务之间依次对共享资源上锁、操作、解锁,在串口终端中观察两个任务的运行情况

    46220

    【One by One系列】IdentityServer4(二)使用Client Credentials保护API资源

    **配置Identity Server Identity资源表示提供给客户端进行用户识别的信息(声明)。声明可能包括用户名称、电子邮件地址等。 API资源表示用户可通过访问令牌访问的受保护数据或功能。 }, "applicationUrl": "http://localhost:5001/" } } } 2.3 定义一个api scope 上篇与前文都介绍过,scope代表资源所有者在被保护资源那里的一些权限 ,可以把被保护资源分为不同的scope,具体的粒度由开发自定义。 3.创建webapi 限制开始创建我们需要保护的api资源 3.1 新建项目 dotnet new webapi -n webapi cd .. dotnet sln add . toekn 不传入token,那么webapi就没收到token,所以返回Unauthorized未授权 类比场景:进入小区,没有门禁,肯定不让你进 5.4 修改API对scope的验证要求 被保护资源

    15430

    使用Spring Security 资源服务器来保护Spring Cloud 微服务

    我在上一篇对资源服务器进行了简单的阐述,让大家对资源服务器的概念有了简单的认识,今天我将用实际例子来演示单体应用改造为Spring Cloud微服务时的资源服务器实现。 分离公私钥 资源服务器只能保存公钥,所以需要从之前的jks文件中导出一个公钥。 自定义资源服务器配置 接下来配置资源服务器。 核心流程和概念 资源服务器其实也就是配置了一个过滤器BearerTokenAuthenticationFilter来拦截并验证Bearer Token。 资源管理器配置 从Spring Security 5的某版本开始不需要再集成适配类了,只需要这样就能配置Spring Security,资源管理器也是这样: @Bean SecurityFilterChain 你受保护资源API将由Bearer Token来保护。 ❝在实际生产中建议把资源服务器封装为依赖集成到需要保护资源的的服务中即可。 附加说明 为了测试资源服务器,假设我们有一个颁发令牌的授权服务器。

    46730

    OAuth2.0通过token获取受保护资源的解析

    grantType": "password", "refreshTokenRequest": null }, "name": "admin" } 首先我们需要写一个资源配置类 ResourceServerConfig extends ResourceServerConfigurerAdapter 其中这个@EnableResourceServer实际上帮我们加入了一个过滤器(应该说所有的业务模块都要有一个资源配置类来开启这个过滤器

    75920

    电厂阴极保护牺牲阳极阴极保护保护系统

    在我国,由于资源、经济等原因,接地网所用材质主要为普通碳钢。由于接地网埋设于地下难以直接监视,当接地网投运后,腐蚀问题就会暴露出来。 阴极保护技术包括牺牲阳极和外加电流两种方法。一般对小口径管道,海水流速及介质组成变化较大,需提供较大保护电流情况,较适宜采用外加电流阴极保护。 近年来,电厂机务部分海水循环水系统越来越多地采用外加电流阴极保护。 机务部分循环水系统通常由管道(直管、弯头及大小头等)、设备 (如凝汽器、换热器、滤网、蝶阀等)组成,具有复杂的结构、多种材质连接,这些都使管道及设备系统阴极保护变得复杂,要对系统进行全面地保护,必须进行科学合理的设计和良好的防腐施工 以往为了防止腐蚀而用镀锌,但是只有镀锌的防腐是不会长效的,所以近年多采取阴极保护方法而达到长效保护目的,理论和实践均证明,这种方法是有效的。图片

    8420

    Identity Server 4 - Hybrid Flow - 使用ABAC保护MVC客户端和API资源

    保护MVC客户端: https://www.cnblogs.com/cgzl/p/9253667.html,  https://www.cnblogs.com/cgzl/p/9268371.html 保护 API资源(这里用到了RBAC: Role-based Access Control 基于角色的访问权限控制 官方文档): https://www.cnblogs.com/cgzl/p/9276278. html 本文介绍如何使用ABAC (Attribute-based Access Control 基于属性的访问权限控制)保护API资源. 代码实现 前一部分保护的是MVC客户端, 那么这一部分就来保护API吧. 现在API项目里建立一个Requirement: ? 它的构造函数可以传递一些参数进来, 但是我这个例子并不需要. 测试, 使用Nick和Dave都应该可以在Contact页面查询出Country资源的数据: ? 但是Kevin就没有权限访问API了: ? Hybrid Flow先介绍到这.

    47740

    你确定懂OAuth 2.0的三方软件和受保护资源服务?

    本文旨在阐明 OAuth2.0 体系中第三方软件和受保护资源服务的职责。 1.1.2 引导授权 当用户要使用三方软件操作在受保护资源上的数据,就需要三方软件引导 授权。 2 构建受保护资源服务 受保护资源最终指向 API,比如排版软件中的受保护资源就是文章查询 API、批量查询 API 等及公众号头像、昵称的 API。 3 微服务架构下 API GATEWAY 的意义 现在已是分布式系统,若有很多受保护资源服务,比如提供用户信息查询的用户资源服务、提供文章查询的文章资源服务、提供视频查询的视频资源服务,那每个受保护资源服务岂不是都要把上述权限范围校验执行一遍 为解决这问题,应有统一网关层处理校验,所有请求都会经过 跳转到不同受保护资源服务。如此无需在每个受保护资源服务上都做权限校验,只在 API GATEWAY 做即可。

    22510

    图片介质受写入保护_写入保护

    最近使用U盘,突然不能正常使用了,在U盘内新建文件夹,提示“介质受写入保护”无法创建文件,赶紧网上查找解决办法。 StorageDevicePolicies 若没有StorageDevicePolicies项则建立此项 3、建立Dword值命名为WriteProtect并令其值为0 4、重启 以上为常规操作,但在实际操作中,进行如上操作有时会解决不了写保护的问题 PS:这里的C要更换成你要修复的设备所在盘符,如F盘之类的) 不知道过了多久,我操作我的U盘,竟然好了,不再提示“介质受写入保护”了,再一看,chkdsk命令执行完了,有一些提示信息。

    10920

    保护模式究竟“保护”了什么

    引言 经过一系列的文章,我们通过汇编语言,体验了保护模式下分段、分页、特权级跳转、中断、异常等机制。 那么,事到如今,你是否已经深谙保护模式的设计之道了呢? 究竟什么是保护模式,保护模式又在“保护”什么呢?他为了什么诞生,又和实模式有什么区别呢? 本文我们就来详细总结一下。 2. 寻址方式与内存保护 2.1. 保护模式 保护模式是在硬件基础上实现的一系列机制,针对寻址方式来说,保护模式下诞生了分段与分页机制用来进行寻址。 内存保护 根据上述详细的解析,我们可以知道,保护模式针对内存的保护主要有以下几方面: 分段、分页将内存切分,让每个进程独有内存空间,限定和保护整个物理内存 通过分段机制实现线性地址对物理地址的隐藏,通过分页机制实现虚拟地址对物理地址的隐藏 ,他们都实现了对物理地址的保护 通过段描述符、页表项属性的描述,提供了不同划分级别下内存块的属性保护 通过特权级与栈切换,实现了不同层级程序切换时的保护 保护模式下中断描述附表的引入,让中断的切换和处理也被保护起来

    22520

    spring cloud以客户端授权模式访问受oauth2保护资源

    使用 // 获取token clientCredentailsOAuth2RestTemplate.getAccessToken() // 调用资源API,会自动附带token clientCredentailsOAuth2RestTemplate.getForObject

    55820

    过压保护(2)_过压保护值和欠压保护

    二极管也无法提供放电保护,需要额外增加开关及控制电路来做过放保护。 比较理想的方案是用MOSFET作为切换和保护开关。MOSFET具有毫欧级的导电阻,它所引起的压降几乎可以忽略。 3、是否有更好的过压保护电路方案? +24V的保护电路, 但负电源(-24V)绕晕了。 器件上电压降的增大既保护了齐纳二极管,又保护了下游的电路。另外,若被保护的下游电路中存在有局部短路或短路故障 时,IOUT会增加,PPTC元件由低阻态变成高阻态,可使电路得到过流保护。 LTC4360-1) 采用纤巧型 8 引脚 SC70 封装 描述 LTC®4360 过压保护控制器可保护 2.5V 至 5.5V 系统免遭电源过压的损坏。

    13620

    变频器保护功能之过电流保护

    1 过电流保护功能 1.1 变频器过电流保护 变频器通过霍尔元件或者电阻检测三相输出电流,变频器发生过流保护故障,通常是变频器的输出电流超过变频器的额定输出电流某个限制值,这也是变频器厂家研发层面的细节 变频器本身的过电流保护区别于电机的过电流保护,一般滞后于电机的过流保护。 1.2 电机过电流保护 电机的过电流保护实际上通过变频器运行中检测实际输出电流,当检测到的实际电流超过:2*电机电流的限制值(2*P640)或者电机额定电流的4倍,取较小的值,电机发生过流故障保护

    61820

    TypeScript 类型保护

    这时就需要用到类型保护,类型保护允许你使用更小范围下的对象类型,常见的类型保护如下: 一、类型断言的类型保护 ? 二、in 语法的类型保护 ? 三、typeof 类型保护 先来看另一种常见的错误: ? ? 通过 typeof 类型保护: ? 四、instanceof 类型保护 ?

    15000

    Linux保护机制

    GCC默认开启(可选项如下) gcc -o test test.c // 默认情况下,开启NX保护 gcc -z execstack -o test test.c // 禁用NX保护 gcc 暴力(如果漏洞不会造成程序崩溃,可以暴力测试256种模块基地址来测试,只到有满足的)最LOW Canary(栈保护) Canary对于栈的保护,在函数每一次执行时,在栈上随机产生一个Canary值。 编译选项: gcc -o test test.c //默认关闭 gcc -fno-stack-protector -o test test.c //禁用栈保护 gcc -fstack-protector -o test test.c //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码 gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码 ​

    2.3K00

    扫码关注腾讯云开发者

    领取腾讯云代金券