内核态信号量(todo)

简介: void sema_init (struct semaphore *sem, int val);void init_MUTEX (struct semaphore *sem); //将sem的值置为1,表示资源空闲void init_MUTEX_LOCKED (struct semaphore *sem); //将sem的值置为0,表示资源忙void down(struct semaphore * sem);该函数用于获得信号量sem,它会导致睡眠,因此不能在中断上下文(包括IRQ上下文和softirq上下文)使用该函数。

void sema_init (struct semaphore *sem, int val);

void init_MUTEX (struct semaphore *sem); //将sem的值置为1,表示资源空闲
void init_MUTEX_LOCKED (struct semaphore *sem); //将sem的值置为0,表示资源忙

void down(struct semaphore * sem);

该函数用于获得信号量sem,它会导致睡眠,因此不能在中断上下文(包括IRQ上下文和softirq上下文)使用该函数。该函数将把sem的值减1,如果信号量sem的值非负,就直接返回,否则调用者将被挂起,直到别的任务释放该信号量才能继续运行。

int down_interruptible(struct semaphore * sem);

该函数功能与down类似,不同之处为,down不会被信号(signal)打断,但down_interruptible能被信号打断,因此该函数有返回值来区分是正常返回还是被信号中断,如果返回0,表示获得信号量正常返回,如果被信号打断,返回-EINTR

int down_trylock(struct semaphore * sem); // 非阻塞函数,不会睡眠。无法锁定资源则马上返回
void up(struct semaphore * sem);

 

目录
相关文章
|
7月前
|
Java API 调度
线程的中断(interrupt)机制
线程的中断(interrupt)机制
93 1
|
2月前
|
消息中间件 并行计算 安全
进程、线程、协程
【10月更文挑战第16天】进程、线程和协程是计算机程序执行的三种基本形式。进程是操作系统资源分配和调度的基本单位,具有独立的内存空间,稳定性高但资源消耗大。线程是进程内的执行单元,共享内存,轻量级且并发性好,但同步复杂。协程是用户态的轻量级调度单位,适用于高并发和IO密集型任务,资源消耗最小,但不支持多核并行。
46 1
|
2月前
|
存储 消息中间件 人工智能
进程,线程,协程 - 你了解多少?
本故事采用简洁明了的对话方式,尽洪荒之力让你在轻松无负担的氛围中,稍微深入地理解进程、线程和协程的相关原理知识
41 2
进程,线程,协程 - 你了解多少?
|
7月前
|
Unix Linux 编译器
进程、线程、协程的区别
进程、线程、协程的区别
71 0
|
存储 Java Unix
什么是线程?为什么需要线程?和进程的区别?
什么是线程?为什么需要线程?和进程的区别?
1679 0
|
存储 并行计算 安全
线程,进程,协程
线程,进程,协程
104 0
|
监控 Java
一文了解JAVA线程的中断(Interrupt)机制
一文了解JAVA线程的中断(Interrupt)机制
1065 0
一文了解JAVA线程的中断(Interrupt)机制
|
安全 程序员 调度
Goroutine 是什么?进程、线程、协程又是什么?有什么区别和联系?
进程,直观点说,保存在硬盘上的程序运行之后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。
178 0
Goroutine 是什么?进程、线程、协程又是什么?有什么区别和联系?
使用共享内存作为进程互斥锁的代码
使用共享内存作为进程互斥锁的代码
112 0
|
缓存 Linux 测试技术
对于操作系统而言进程、线程以及Goroutine协程的区别
进程、线程、协程实际上都是为并发而生。但是他们的各自的模样是完全不一致的,下面我们来分析一下他们各自的特点和关系。本文不重点介绍什么是进程和线程,而是提炼进程、线程、协程干货。且是基于Linux下的进程、线程解释。
224 0
对于操作系统而言进程、线程以及Goroutine协程的区别