• 2024-06-19移植案例与原理 - HDF驱动框架-OSAL
    为了提升驱动代码在不同内核子系统间的可复用能力,OpenHarmonyHDF(HardwareDriverFoundation)驱动框架提供了OSAL(OperatingSystemAbstractionLayer)操作系统抽象层接口。OSAL为驱动程序提供了任务、定时器、互斥锁、信号量等基础库相关接口,使驱动相关的实现不再依赖于具
  • 2024-05-29自旋锁与互斥锁的区别
    编程世界中,锁用来保护一个资源不会因为并发操作而引起冲突,导致数据不准确。常见的锁有互斥锁、读写锁、自旋锁、信号量、分布式锁等等。这里仅仅讨论互斥锁和自旋锁的区别。自旋锁是当资源被占用时,锁逻辑循环判断资源是否可用,而不是把进程挂起,直到资源可用。自旋锁采用的是,循
  • 2024-05-05自旋锁spinlock的实现
    自旋锁,顾名思义:自己在原地打转,等待资源可用,一旦可用就上锁霸占它。问题来了,假设别人已经上锁了,你原地打转会占住CPU资源了,别的程序怎么运行?它没有CPU怎么解锁?这个问题,有2个答案:①原地打转的是CPUx,以后CPUy会解锁:这涉及多个CPU,适用于SMP系统;②对于单CPU系统,自旋锁的“自旋
  • 2024-03-25spinlock和mutex选用方法
    资料参考:《宋宝华Linux设备驱动开发详解》 spinlock和mutex选用方法如下:1、当锁不能被获取到时,使用互斥体的开销仅仅是上下文切换,使用自旋锁的开销是等待获取自旋锁(由临界区的执行时间决定)。若临界区比较小,适合使用自旋锁。若临界区较大,适合使用互斥锁2、互斥锁所保护的临
  • 2024-03-25自旋锁spinlock
    参考资料:《正点原子Linux驱动教程》《宋宝华Linux设备驱动开发详解》 原子操作只能对整型变量或者bit位进行保护,但是实际使用中,不可能只有整型变量或者bit位等临界区 自旋锁spinlock也是一种典型的对临界资源进行互斥访问的手段,其名称来源自它的工作方式。当一个线程要
  • 2024-03-11【转】spin lock 和mutex
      原文:https://zhuanlan.zhihu.com/p/88427657 packagemainimport( "fmt" "log" "runtime" "sync" "sync/atomic" "time")//Lockerisaspinlockimplementation.////ALockermustnot
  • 2024-02-28pthread与tbb中各种锁的对比测试
     pthread中提供的锁有:pthread_mutex_t,pthread_spinlock_t,pthread_rwlock_t。   pthread_mutex_t是互斥锁,同一瞬间只能有一个线程能够获取锁,其他线程在等待获取锁的时候会进入休眠状态。因此pthread_mutex_t消耗的CPU资源很小,但是性能不高,因为会引起线程切换。   pthr
  • 2023-12-22Linux内核在RISC-V架构下的spinlock实现
    riscv没有sev/wfe指令,当前无法在spinlock时省功耗,只能通过while循环不断检查条件。本文分析linux内核下对于spinlock的实现,具体到RISC-V体系结构。由于RISC-V体系结构下目前只是简单的实现了一个基于TAS的最基本的spinlock,本文的另一个附加任务就是分析Linux内核为各个平台下实
  • 2023-12-17linux---内核笔记
    semaphore用于进程和进程之间的同步允许有多个进程进入临界区代码执行进程获取不到信号量锁会陷入休眠,让出cpu信号量本质是基于进程调度器,UP和SMP下的实现无差异。被信号量锁保护的临界区代码允许睡眠,这是和自旋锁最大的区别之一。不支持进程和中断之间的同步,这是和自旋锁
  • 2023-12-10锁类型及其规则 【ChatGPT】
    https://www.kernel.org/doc/html/latest/locking/locktypes.html锁类型及其规则介绍内核提供了各种锁原语,可以分为三类:睡眠锁CPU本地锁自旋锁本文概念上描述了这些锁类型,并提供了它们的嵌套规则,包括在PREEMPT_RT下的使用规则。锁类别睡眠锁睡眠锁只能在可抢占的
  • 2023-09-17linux --- 自旋锁(spinlock_t)
    定义自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于
  • 2023-09-12使用gcc内置CAS函数实现spinlock
     Built-inFunction:bool__atomic_compare_exchange_n(type*ptr,type*expected,typedesired,boolweak,intsuccess_memorder,intfailure_memorder)Thisbuilt-infunctionimplementsanatomiccompareandexchangeoperation.Thiscomparesthecontents
  • 2023-08-30C# 中的锁对象SpinLock,Mutex,ReaderWriteLockSlim,SemaphoreSlim
    在C#中,有多种锁类型可用于控制并发访问和保护共享资源。以下是其中一些锁类型及其简要介绍:SpinLock:SpinLock是一种自旋锁,它在使用时会忙等待直到获取到锁为止,因此适用于低延迟应用程序。由于自旋操作可能会消耗CPU资源,因此SpinLock最适合在短时间内进行锁定和释放。M
  • 2023-06-20基于CAS实现自旋锁
    #include<aomic>classSpinLock{public:SpinLock():flag_(false){}voidlock(){boolexcept=false;while(!flag_.compare_exchange_weak(expect,true)){expect=false;}}voidunlock(){flag_.store
  • 2023-05-0122 同步与互斥(八)总结
    1实现的基础同步与互斥的基本操作:spinlock;semaphore;mutex而实现上述操作的基本是基于:原子操作;中断屏蔽;抢占屏蔽来实现的对于spinlock;semaphore;mutex等相关的操作,基本实现都是lock时,放回成功表示上锁成功。否则就需要等待对应unlock后才能返回成功,进入临界区2彼此的关联与区
  • 2023-04-2919 同步与互斥(五)自旋锁
    1简介自旋锁:通俗的说就是自己在原地打转,一直等待资源可用。不会休眠对临界资源的访问时,因为自旋锁的存在,某段临界资源被占用后。其他事件将无法访问,即进行所谓的自旋,“原地打转”注意:在自旋锁的临界区不能使用可能引起进程调度的函数(因为抢占已经被禁止了)。示例: copy_to_
  • 2023-03-16【并发编程十四】c++原子操作(2)——实现自旋锁
     【并发编程十四】c++原子操作(2)——实现自旋锁一、自旋锁简介二、使用自旋锁三、不使用自旋锁四、分析 简介在介绍完原子操作,我们这篇使用c++提供的原子操
  • 2023-02-23ARM ticket spinlock 的实现
     https://jgsun.github.io/2021/09/12/ARM-ticket-spinlock/ARMticketspinlock的实现(jgsun.github.io) ARMticketspinlock的实现2021-09-12jgsun