首页 > 其他分享 >spinlock和mutex选用方法

spinlock和mutex选用方法

时间:2024-03-25 21:34:21浏览次数:28  
标签:互斥 选用 临界 mutex 自旋 进程 spinlock

资料参考: 《宋宝华 Linux设备驱动开发详解》   spinlock和mutex选用方法如下: 1、当锁不能被获取到时,使用互斥体的开销仅仅是上下文切换,使用自旋锁的开销是等待获取自旋锁(由临界区的执行时间决定)。若临界区比较小,适合使用自旋锁。若临界区较大,适合使用互斥锁 2、互斥锁所保护的临界区可包含引起阻塞的代码,而自旋锁要绝对避免用来保护有进程调度的临界区。因为进程调度当进程切换出去之后,另一个进程企图获取本自旋锁,这样就会导致死锁 3、互斥体存在于进程上下文,因此,如果被保护的共享资源需要再中断或软中断情况下使用,则只能选择自旋锁。当然,如果一定要用互斥体,则只能通过mutex_trylock()方式进行,不能获取就立即返回以避免阻塞    

标签:互斥,选用,临界,mutex,自旋,进程,spinlock
From: https://www.cnblogs.com/lethe1203/p/18095410

相关文章

  • 互斥体mutex
    参考资料:《正点原子Linux驱动教程》《宋宝华Linux设备驱动开发详解》 将信号量的值设置为1就可以使用信号量进行互斥访问了,虽然可以通过信号量实现互斥,但是Linux提供了一个比信号量更专业的机制来进行互斥,它就是互斥体—mutex。互斥访问表示一次只有一个线程可以访问共......
  • 自旋锁spinlock
    参考资料:《正点原子Linux驱动教程》《宋宝华Linux设备驱动开发详解》 原子操作只能对整型变量或者bit位进行保护,但是实际使用中,不可能只有整型变量或者bit位等临界区 自旋锁spinlock也是一种典型的对临界资源进行互斥访问的手段,其名称来源自它的工作方式。当一个线程要......
  • 【转】spin lock 和mutex
      原文:https://zhuanlan.zhihu.com/p/88427657 packagemainimport( "fmt" "log" "runtime" "sync" "sync/atomic" "time")//Lockerisaspinlockimplementation.////ALockermustnot......
  • oracle 19c普通用户查询字典表all_views时等待row cache mutex事件
    近日,一19coraclerac测试环境,初始反馈是sys用户查询很快,cdb用户如c##any查询系统表如all_tables很慢,至少相差几十倍、有时候直接半天超时还没执行完,经查一开始发现在等待gccrmultiblockmixed事件,该事件据官方解释,该事件时提升性能用的,如下:OracleGCCRMultiBlockMixed......
  • VSCode编写多线程程序碰到 mutex 和 thread 未定义的报错问题
    硬件:ThinkBook16G5+IRH系统:Win11家庭中文版22H2如果碰到在线安装MinGW-w64失败的问题可以参考以下链接在线安装MinGW-w64失败下载mingw-std-threads文件夹目前MinGWGCC缺少标准的C++11线程类,该库补充实现有关thread和mutex的内容https://github.com/mega......
  • Go - #70: Using mutexes inaccurately with slices and maps
      ......
  • 引入JavaScript自定义提示信息(账户密码不为空,必须勾选用户协议)
     当不输入用户或密码就登录时不勾选用户协议就登录时form表单的修改,引入了onsubmit控件,提交表单时,调用validateForm函数<formaction="/home"method="post"onsubmit="returnvalidateForm()">validateForm函数内容functionvalidateForm(){//验证用户名和密......
  • 编译时process_begin: CreateProcess | mutex/condition_variable 报错的一种解决办法
    系统:win10目的:想跑一下wisper.cpp前置操作:把该项目git下来后打算make,一make就报错注意,图里其实有两种错误,第一种是process_begin:CreateProcess(NULL,xxx)failed,第二种是error:'thread'isnotamemberof'std'.第二种错误是因为mingw不支持thread库,但是官方有给过补丁,可......
  • 全志R128 SDK HAL 模块开发指南之HW Spinlock
    模块介绍hwspinlock提供一种硬件同步机制,lock操作可以防止多处理器同时处理共享数据。保证数据的一致性。源码结构├──hal_hwspinlock.c├──hwspinlock.h├──Kconfig├──Makefile├──platform│├──hwspinlock-sun20iw2.h└──platform-hwspinlock......
  • Qt 线程同步 QMutex、QReadWriteLock、QWaitCondition
    在Qt中,线程同步可以使用以下几种方式来实现:一、互斥锁(QMutex)互斥锁用于保护共享资源,确保在同一时间只有一个线程能够访问该资源。线程在访问共享资源之前需要获取互斥锁,使用完后再释放互斥锁,以确保同一时间只有一个线程在执行关键代码段。1.创建QMutex对象:在需要进行线程同步的......