再加个FREEBSD的MUTEX

2009-05-13 01:37:19来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

我开始来劲了.呵呵,先搞两头,再取中间
/*-
* 跳过BSD版权申明
*/
#include
__FBSDID("$FreeBSD: src/sys/kern/kern_mutex.c,v 1.147.2.3 2004/10/16 02:14:59 ups Exp $");
#include "opt_adaptive_mutexes.h"
#include "opt_ddb.h"
#include "opt_mprof.h"
#include "opt_mutex_wake_all.h"
#include "opt_sched.h"  /*以上是编译时产生的头文件,根据配置文件而产生*/
#include
#include
#include
#include
#include
#include
#include
#include  
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*
* 单个线程唤醒需要修复以避免优先权继承竞争条件
*/
#ifndef MUTEX_WAKE_ALL
#define MUTEX_WAKE_ALL
#endif
/*
* 内部使用的宏.
*/
#define mtx_unowned(m) ((m)->mtx_lock == MTX_UNOWNED)/* 该互斥体还没有被其他线程拥有时返回真*/
#define mtx_owner(m) (mtx_unowned((m)) ? NULL
: (struct thread *)((m)->mtx_lock & MTX_FLAGMASK))/* 该互斥体已经被某线程拥有时返回该线程地址指针,否则返回空*/
/* 以下是对于可睡眠或自旋的互斥体定义其所属锁的类,关于lock_class是在src/sys/sys/lock.h文件中有定义.
*/
struct lock_class lock_class_mtx_sleep = {
"sleep mutex",
LC_SLEEPLOCK | LC_RECURSABLE  /*属于可睡眠并可嵌套的一类锁,lock_class结构是mtx结构的一成员,说明互斥体的锁的属性*/
};
struct lock_class lock_class_mtx_spin = {
"spin mutex",
LC_SPINLOCK | LC_RECURSABLE   /*属于可自旋并可嵌套的一类锁*/
};
/*
* 系统范围内的互斥体
*/
struct mtx sched_lock;/*用于进程调度的互斥体*/
struct mtx Giant;     /*用于全局代码的互斥体*/
#ifdef MUTEX_PROFILING
...关于一些调试代码我在这不予以讨论
#endif
/* __mtx_*宏的内连函数版本,可用于从汇编语言调用,实际上是mtx_lock函数对他进行调用
* mtx_lock(m)即为:_mtx_lock_flags(struct mtx *m,0,LOCK_FILE, LOCK_LINE)
*/
void
_mtx_lock_flags(struct mtx *m, int opts, const char *file, int line)
{
MPASS(curthread != NULL); /*检查当前线程,curthread为当前正在运行线程,该指针不能为空*/
KASSERT(m->mtx_object.lo_class == &lock_class_mtx_sleep,
     ("mtx_lock() of spin mutex %s @ %s:%d", m->mtx_object.lo_name,
     file, line)); /*也是一检查宏,因为整个函数是针对可睡眠互斥体,如果互斥体m属于自旋互斥体则报错*/
WITNESS_CHECKORDER(&m->mtx_object, opts | LOP_NEWORDER | LOP_EXCLUSIVE,
     file, line);/*witness_checkorder函数将检查线程占用多个锁时,是否会引起死锁等,该函数在/sys/kern/subr_witness.c中*/
_get_sleep_lock(m, curthread, opts, file, line);
/*  _get_sleep_lock实际上是一宏,在文件mutex.h头文件中定义:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:督促下自己,再发一篇关于BSD核心的MUTEX

下一篇:也不知道是什么时候写的关于TELNET的问题