[code]static __inline__ int atomic_dec_and_test(atomic_t *v) { unsigned char c; __asm__ __volatile__( lock "decl %0; sete %1" :"=m" (v->counter), "=qm" (c) :"m" (v->counter) : "memory"); return c != 0; }[/code]lcok指令可实现原子操作,那么它的有效范围是什么呢?上面代码中lock对decl与sete都有效吗?如果在"decl %0; sete %1"之后又加了个"某指令",那么后面的指令还是原子操作吗?
by stuman - 内核源码 - 2014-04-01 12:32:10 阅读(922) 回复(2)
linux/include/linux/spinlock_api_up.h中关于__lock的宏定义: 27#define __lock(lock) \ 28 do { preempt_disable(); __acquire(lock); (void)(lock); } while (0) 先禁止抢占; lock/unlock匹配检查; (void)(lock); 请教这句话什么意思?
[code]__asm__ __volatile__( "# atomic up operation\n\t" lock "incl %0\n\t" /* ++sem->count */ "jle 2f\n" "1:\n" lock_SECTION_START("") "2:\tlea %0,%%eax\n\t" "call __up_wakeup\n\t" "jmp 1b\n" lock_SECTION_END ".subsection 0\n" :"=m" (sem->count) : :"memory","ax");[/code]以上代码用于释放信号量,请问其中的lock是什么?是一个汇编命令吗?为什么不给它加引号呢?
本帖最后由 yshihyu 于 2012-08-25 11:42 编辑 请问一下 recursive lock 跟一般 lock 差异在哪? 有什么特殊功能? 可以给个例子说一下吗? 谢谢
TO_CHAR
(TIMESTAMP,'YYYYMMDD'
Is anyone know how to prevent lock escalation? I got a lot of this kind of message in my notify log: 2007-06-03-06.55.43.019190 Instance:db2test Node:000 PID:1216710(db2agent (TEST) 0) TID:1 Appid:*LOCAL.db2test.070602225057 data management sqldEscalatelocks Probe:2 Database:TEST ADM5500W DB2 is performing lock escalation. The total number of locks currently held is "65564", and t...