【问题标题】:pthread_mutex_t struct: What does lock stand for?pthread_mutex_t 结构:锁代表什么?
【发布时间】:2014-06-20 09:34:59
【问题描述】:

我正在查看 pthreadtypes.h 文件中的 pthread_mutex_t 结构。 “__lock”代表什么?是否像分配给互斥锁的锁号?

typedef union
{
  struct __pthread_mutex_s
  {
     int __lock;
     unsigned int __count;
     int __owner;
     #if __WORDSIZE == 64
     unsigned int __nusers;
     #endif
    /* KIND must stay at this position in the structure to maintain
     binary compatibility.  */
     int __kind;
     #if __WORDSIZE == 64
     int __spins;
     __pthread_list_t __list;
     # define __PTHREAD_MUTEX_HAVE_PREV 1
     #else
     unsigned int __nusers;
     __extension__ union
    {
      int __spins;
      __pthread_slist_t __list;
    };
    #endif
  } __data;
 char __size[__SIZEOF_PTHREAD_MUTEX_T];
 long int __align;

} pthread_mutex_t;

【问题讨论】:

    标签: locking pthreads posix mutex mutual-exclusion


    【解决方案1】:

    struct __pthread_mutex_s__data 的 __lock 成员在 Linux 上用作 futex 对象。根据您所查看的架构,以下许多细节可能会有所不同:

    请参阅pthread_mutex_lock.c 代码,了解 pthread 互斥锁的高级锁定功能 - __pthread_mutex_lock(),通常最终会调用 LLL_MUTEX_LOCK() 以及 LLL_MUTEX_LOCK() 和朋友的定义,最终会调用 lll_lock(),等等,在lowlevellock.h。

    lll_lock() 宏依次调用__lll_lock_wait_private(),后者又调用lll_futex_wait(),从而产生sys_futex 系统调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多