从核互斥锁和带锁打印



  • 使用:

    包含:

    /home/export/online1/swmore/opensource/cal/cal.h
    

    原理

    从核互斥锁的实现原理是两个原子自增变量req和cur.

    加锁:

    先用faal指令取req并使其+1.
    等待cur==req.
    由于req自增, 所以每个从核不会拿到相同的req, 同时cur的值唯一, 所以不会同时有两个从核加锁成功.

    解锁:

    使用faal指令让cur+1. 这样拿到下一个req的从核可以进行加锁了.

    接口

    void cal_global_lock(); //全局锁
    void cal_global_unlock(); //全局解锁
    typedef struct cal_lock {int req, cur;} cal_lock_t; //局部锁变量
    void cal_lock(cal_lock_t *lock); //局部锁
    void cal_unlock(cal_lock_t *lock); //局部解锁
    void cal_locked_printf(char *fmt, ...);//互斥的, 完整跳转, 带缓冲的printf.
    

    全局锁是默认的, 所有从核可用的锁.
    局部锁是通过定义变量为不同的事情提供互斥操作.
    注意局部锁变量的初始化为 req=0, cur=0. 需要手工初始化, 例如:

    cal_lock_t alock = {0, 0};
    

    另外, 头文件所在路径也有一个样例用法.

    性能

    不保证性能, 主要用于打印.



  • 此回复已被删除!

登录后回复