Почему структура pthread_mutex_t имеет все нули в GDB? - PullRequest
0 голосов
/ 21 октября 2019

Почему структура pthread_mutex_t имеет все нули? Ядро заблокированного тестового приложения ARM в сеансе GDB:

[Switching to thread 3 (LWP 3587)]
#0  __lll_lock_wait (futex=futex@entry=0x2105c <one_mutex>, private=0) at lowlevellock.c:46
46  lowlevellock.c: No such file or directory.
(gdb) f 1
#1  0xaf973818 in __GI___pthread_mutex_lock (mutex=0x2105c <one_mutex>) at pthread_mutex_lock.c:81
81  pthread_mutex_lock.c: No such file or directory.
(gdb) p mutex
$1 = (pthread_mutex_t *) 0x2105c <one_mutex>
(gdb) p (pthread_mutex_t ) 0x2105c
$2 = {
  __data = {
    __lock = 0,
    __count = 0,
    __owner = 0,
    __kind = 0,
    __nusers = 0,
    {
      __spins = 0,
      __list = {
        __next = 0x0
      }
    }
  },
  __size = '\000' <repeats 23 times>,
  __align = 0
}

1 Ответ

0 голосов
/ 21 октября 2019

pthread_mutex_t используется для всех типов мьютексов, а некоторые его члены используются только для определенных типов мьютексов.

owner Член установлен как минимум для следующих типов мьютексов:

  • PTHREAD_MUTEX_ERRORCHECK_NP
  • PTHREAD_MUTEX_RECURSIVE_NP

См. glibc-реализацию pthread_mutex_trylock для более подробной информации.

...