semaphore-helper.h

来自「linux 内核源代码」· C头文件 代码 · 共 83 行

H
83
字号
#ifndef _M68K_SEMAPHORE_HELPER_H#define _M68K_SEMAPHORE_HELPER_H/* * SMP- and interrupt-safe semaphores helper functions. * * (C) Copyright 1996 Linus Torvalds * * m68k version by Andreas Schwab *//* * These two _must_ execute atomically wrt each other. */static inline void wake_one_more(struct semaphore * sem){	atomic_inc(&sem->waking);}static inline int waking_non_zero(struct semaphore *sem){	int ret;	unsigned long flags;	spin_lock_irqsave(&semaphore_wake_lock, flags);	ret = 0;	if (atomic_read(&sem->waking) > 0) {		atomic_dec(&sem->waking);		ret = 1;	}	spin_unlock_irqrestore(&semaphore_wake_lock, flags);	return ret;}/* * waking_non_zero_interruptible: *	1	got the lock *	0	go to sleep *	-EINTR	interrupted */static inline int waking_non_zero_interruptible(struct semaphore *sem,						struct task_struct *tsk){	int ret;	unsigned long flags;	spin_lock_irqsave(&semaphore_wake_lock, flags);	ret = 0;	if (atomic_read(&sem->waking) > 0) {		atomic_dec(&sem->waking);		ret = 1;	} else if (signal_pending(tsk)) {		atomic_inc(&sem->count);		ret = -EINTR;	}	spin_unlock_irqrestore(&semaphore_wake_lock, flags);	return ret;}/* * waking_non_zero_trylock: *	1	failed to lock *	0	got the lock */static inline int waking_non_zero_trylock(struct semaphore *sem){	int ret;	unsigned long flags;	spin_lock_irqsave(&semaphore_wake_lock, flags);	ret = 1;	if (atomic_read(&sem->waking) > 0) {		atomic_dec(&sem->waking);		ret = 0;	} else		atomic_inc(&sem->count);	spin_unlock_irqrestore(&semaphore_wake_lock, flags);	return ret;}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?