⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 semaphore.h

📁 xen 3.2.2 源码
💻 H
字号:
#ifndef _SEMAPHORE_H_#define _SEMAPHORE_H_#include <wait.h>#include <spinlock.h>/* * Implementation of semaphore in Mini-os is simple, because  * there are no preemptive threads, the atomicity is guaranteed. */struct semaphore{	int count;	struct wait_queue_head wait;};/* * the semaphore definition */struct rw_semaphore {	signed long		count;	spinlock_t		wait_lock;	struct list_head	wait_list;	int			debug;};#define __SEMAPHORE_INITIALIZER(name, n)                            \{                                                                   \    .count    = n,                                                  \    .wait           = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait)    \}#define __MUTEX_INITIALIZER(name) \    __SEMAPHORE_INITIALIZER(name,1)                           #define __DECLARE_SEMAPHORE_GENERIC(name,count) \    struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)    #define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)static inline void init_SEMAPHORE(struct semaphore *sem, int count){  sem->count = count;  init_waitqueue_head(&sem->wait);}#define init_MUTEX(sem) init_SEMAPHORE(sem, 1)static void inline down(struct semaphore *sem){    unsigned long flags;    while (1) {        wait_event(sem->wait, sem->count > 0);        local_irq_save(flags);        if (sem->count > 0)            break;        local_irq_restore(flags);    }    sem->count--;    local_irq_restore(flags);}static void inline up(struct semaphore *sem){    unsigned long flags;    local_irq_save(flags);    sem->count++;    wake_up(&sem->wait);    local_irq_restore(flags);}/* FIXME! Thre read/write semaphores are unimplemented! */static inline void init_rwsem(struct rw_semaphore *sem){  sem->count = 1;}static inline void down_read(struct rw_semaphore *sem){}static inline void up_read(struct rw_semaphore *sem){}static inline void up_write(struct rw_semaphore *sem){}static inline void down_write(struct rw_semaphore *sem){}#endif /* _SEMAPHORE_H */

⌨️ 快捷键说明

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