• nexus's avatar
    lab6 · a28ae8d4
    nexus authored
    a28ae8d4
lock.h 929 bytes
#ifndef __LOCK_H__
#define __LOCK_H__
#include "common.h"
//自旋锁
typedef struct spinlock {
    int locked;//标识锁的状态 0表示未上锁
    char* name;//给锁一个名字
    int cpuid;//获取该锁的CPU编号
} spinlock_t;
//睡眠锁
typedef struct sleeplock {
    spinlock_t lk;
    int locked;
    char* name;
    int pid;   //进程号
} sleeplock_t;
void push_off();//关中断
void pop_off();//开中断
void spinlock_init(spinlock_t* lk, char* name);//初始化一个自旋锁
void spinlock_acquire(spinlock_t* lk);//获取指定自旋锁
void spinlock_release(spinlock_t* lk);//释放指定自旋锁
bool spinlock_holding(spinlock_t* lk); //检查当前CPU是否持有指定自旋锁
void sleeplock_init(sleeplock_t* lk, char* name);  //逻辑与自旋锁大致相同
void sleeplock_acquire(sleeplock_t* lk);
void sleeplock_release(sleeplock_t* lk);
bool sleeplock_holding(sleeplock_t* lk);
#endif