- 论坛徽章:
- 0
|
应用层使用spinlock是不是可以做到,在进程时间片没有消耗完毕之前,CPU是一直对变量进行测试的,当然这个测 ...
cugb_cat 发表于 2011-03-09 21:18
恩,是这样的,
pthread_spin_lock和内核里类似,内核在UP时是禁止抢占不去加锁,而用户不加锁就相当于不需要lock前缀了
#ifndef LOCK_PREFIX
# ifdef UP
# define LOCK_PREFIX /* nothing */
# else
# define LOCK_PREFIX "lock;"
# endif
#endif
int
pthread_spin_lock (lock)
pthread_spinlock_t *lock;
{
asm ("\n"
"1:\t" LOCK_PREFIX "decl %0\n\t"
"jne 2f\n\t"
".subsection 1\n\t"
".align 16\n"
"2:\trep; nop\n\t"
"cmpl $0, %0\n\t"
"jg 1b\n\t"
"jmp 2b\n\t"
".previous"
: "=m" (*lock)
: "m" (*lock));
return 0;
} |
|