从核互斥锁和带锁打印
-
使用:
包含:
/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};
另外, 头文件所在路径也有一个样例用法.
性能
不保证性能, 主要用于打印.
-
此回复已被删除!