spinlock_t

2024-06-04 11:38
文章标签 spinlock

本文主要是介绍spinlock_t,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

头文件:

#include <linux/spinlock.h>

定义:

typedef struct spinlock {union {struct raw_spinlock rlock;#ifdef CONFIG_DEBUG_LOCK_ALLOC
# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))struct {u8 __padding[LOCK_PADSIZE];struct lockdep_map dep_map;};
#endif};
} spinlock_t;


初始化:

void spin_lock_init(spinlock_t *lock)
上锁:
static inline void spin_lock(spinlock_t *lock)
{raw_spin_lock(&lock->rlock);
}

解锁:

static inline void spin_unlock(spinlock_t *lock)
{raw_spin_unlock(&lock->rlock);
}

尝试上锁:

static inline int spin_trylock(spinlock_t *lock)
{return raw_spin_trylock(&lock->rlock);
}



这篇关于spinlock_t的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029974

相关文章

nginx学习之自旋锁nginx_spinlock

nginx中自旋锁简介: 基于原子操作,Nginx实现了一个自旋锁。自旋锁是一种非睡眠锁,也就是说,某进程如果试图获得自旋锁,当发现锁已经被其他进程获得时,那么不会使得当前进程进入睡眠状态,而是始终保持进程在可执行状态,每当内核调度到这个进程执行时就持续检查是否可以获取到锁。在拿不到锁时,这个进程的代码将会一直在自旋锁代码处执行(下面的源码会分析到),知道其他进程释放了锁且当前进程获取

五、自旋锁(spinlock)

自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。   由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。   信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_

【讯为Linux驱动开发】6.自旋锁spinlock

【自旋锁】 线程A获取自旋锁后,B假如想获取自旋锁则只能原地等待,仍占用CPU,不会休眠,直到获取自旋锁为止。 【函数】 DEFINE SÃINLOCK(spinlock t lock)   定义并初始化一个变量int spin lock init(spinlock t*lock)   初始化自旋锁void spin lock(spinlock t *lock)    获取自旋锁。也叫做加

JOS中 spinlock 的实现

JOS中  "spinlock" 的实现 In software engineering, a spinlock is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is availa

Spinlock kernel lock mechanism

一、概述 spinlock是kernel的一种锁机制 kernle的锁机制有三种: spinlock mutex semaphore 在设备驱动开发中,spinlock与mutex比较常用 一个thread去获取spinlock的时候是会不断的去轮询的,比较耗用cpu资源。(在mutex的时候,是进入sleep,所以不耗cpu资源)。所以spinlock用在很短的lock任务下。

spinlock原理

代码路径 arch/arm/include/asm/spinlock.h 锁数据结构如下: 注意sllock和下面的ticket互为union 基本原理: spinlock 叫号机制,先拿到一个号, 即为先在slock基础上给next++ unspinlock放锁时给owner++。 放锁后正好使next== owner

菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock

分类: Server - 菜鸟nginx源码剖析 2014-11-11 20:48 15080人阅读 评论(0) 收藏 举报 nginx 源码 自旋锁 spinlock 剖析 目录(?)[+]   菜鸟nginx源码剖析数据结构篇(十) 自旋锁ngx_spinlock   Author:Echo Chen(陈斌) Email:chenb19870707@g

nginx自旋锁ngx_spinlock分析

以前也看过linux内核自旋锁的实现代码,现在工作主要是应用程序开发,对应用程序开发不是太了解,我喜欢通过看优秀的开源软件学习软件开发,之前对linux kernel感兴趣就是看内核代码,现在工作需要http,数据库,网络编程这方面的只是,我想学习http和网络编程看完nginx我想也差不多了。 void ngx_spinlock函数代码: voidngx_spinlock(ngx_a

SPINLOCK学习

Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现 http://blog.csdn.net/mrwangwang/article/details/20530279 在spin_lock_irqsave与spin_unlock_irqrestore中的内核抢占 https://blog.csdn.net/yiyeguzhou100/article/details/49869

C++ SpinLock、RecursiveSpinLock 基于原子CAS实现自旋锁(TASLock、TTASLock)

本文使用内存屏障来 VolatileRead、VolatileWrite 保证读写重入自旋锁的当前线程ID(tid),如果不愿意采用内存屏障的方式来处理,人们可以选择使用原子变量读写来代替。 C++ 置R/W内存屏障: static inline void MemoryBarrier() noexcept{std::atomic_thread_fence(s