Описание членов структуры pthread_rwlock_t - PullRequest
2 голосов
/ 17 апреля 2019

Может ли кто-нибудь обобщить, что означают различные члены pthread_rwlock_t?

    struct
 { 
   int __lock;
   unsigned int __nr_readers;
   unsigned int __readers_wakeup;
   unsigned int __writer_wakeup;
   unsigned int __nr_readers_queued;
   unsigned int __nr_writers_queued;
   int __writer;
   int __shared; 
   unsigned long int __pad1;
   unsigned long int __pad2;
   /* FLAGS must stay at this position in the structure to maintain
      binary compatibility.  */
   unsigned int __flags;
 } __data;

Я отлаживаю один тупик, в котором состояния блокировки выглядят так:

{__data = {
   __lock = 2,
   __nr_readers = 24644,
   __readers_wakeup = 28432136,
   __writer_wakeup = 24644,
   __nr_readers_queued = 0,
   __nr_writers_queued = 0,
   __writer = 0,
   __shared = 0,
   __pad1 = 0, __pad2 = 0,
   __flags = 0}, 
 __size = "\002\000\000\000D`\000\000\bױ\001D`", '\000' <repeats 41 times>,
 __align = 105845174042626}

И поток блокируется при попытке установить блокировку чтения на нем. Структура замка выглядит вменяемой?

Операционная система - CentOS 7.6 с glibc-2.17-260.el7_6.3.x86_64.

1 Ответ

0 голосов
/ 17 апреля 2019

Текущие версии GNU libc (версия 2.25 и выше) поставляют расширения gdb, которые будут декодировать элементы различных структур pthread, включая pthread_rwlock_t.Однако, глядя на код для этого расширения, он ожидает, что содержимое pthread_rwlock_t будет сильно отличаться от того, что вы показали, поэтому ручное применение его к вашему дампу данных будет бесполезным.По той же причине я не могу сказать вам, что означают эти поля.

Если вы скажете нам точно, какой дистрибутив Linux вы используете, его возраст и каков результат запуска /lib/libc.so.6, как если бы это былопрограмма (если этот файл не существует, ищите его в подкаталогах /lib и /lib64), мы могли бы быть более полезными.

Стоит также попытаться переместитьваша программа в более новом дистрибутиве Linux и посмотреть, сможете ли вы воспроизвести проблему.Тогда вы можете использовать расширения GDB самостоятельно.

...