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 + -
显示快捷键?