Chinaunix首页 | 论坛 | 博客
  • 博客访问: 157550
  • 博文数量: 56
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 502
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-18 14:21
文章分类

全部博文(56)

文章存档

2010年(39)

2009年(17)

我的朋友

分类: LINUX

2010-01-04 12:58:08

线程互斥锁pthread_mutex_t的实现原理:
pthread_mutex_lock:
atomic_dec(pthread_mutex_t.value);
if(pthread_mutex_t.value!=0)
   futex(WAIT)
else
   success

pthread_mutex_unlock:
atomic_inc(pthread_mutex_t.value);
if(pthread_mutex_t.value!=1)
   futex(WAKEUP)
else
   success

信号量sem_t的实现原理(直接从glibc/nptl/DESIGN-sem.txt中摘的):
sem_wait(sem_t *sem)
{
  for (;;) {

    if (atomic_decrement_if_positive(sem->count))
      break;

    futex_wait(&sem->count, 0)
  }
}

sem_post(sem_t *sem)
{
  n = atomic_increment(sem->count);
  // Pass the new value of sem->count
  futex_wake(&sem->count, n + 1);
阅读(853) | 评论(0) | 转发(0) |
0

上一篇:vim学习

下一篇:读cap文件模拟发包

给主人留下些什么吧!~~