linux互斥锁和信号灯之间有什么深层区别?

时间:2019-08-23 01:51:48

标签: linux mutex semaphore

对于详细的实现,我想知道互斥量和信号量之间的深层设计差异。我的问题是:

  1. 哪个人的表现更好?为什么?
  2. 即使没有任务在睡觉,为什么信号量每次都会使用系统调用?
  3. 为什么不使用信号量重用类似的实现来唤醒互斥锁的任务?

这是一些伪代码:

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_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);
}
sem_post(sem_t *sem):
   n = atomic_increment(sem->count);
   futex_wake(&sem->count, n + 1);

0 个答案:

没有答案