Понимание соглашений об исходном коде glibc

Я просматривал некоторые исходные коды glibc, в частности код nptl, и обнаружил, что его немного сложно понять, так как в нем есть соглашения, с которыми я не знаком с участием.

Например, я просматривал очень маленький файл pthread_equal.c, и у меня возникло несколько вопросов:

22 int
23 __pthread_equal (thread1, thread2)
24      pthread_t thread1;
25      pthread_t thread2;
26 {
27   return thread1 == thread2;
28 }
29 strong_alias (__pthread_equal, pthread_equal)
  1. Объявление в строках 22 и 23 выглядит так, как будто я его понимаю. Он имеет возвращаемый тип int, затем имя функции __pthread_equalи список параметров (thread1, thread2). Но для чего нужны объявления в строках 24 pthread_t thread1;и 25 pthread_t thread2;? Похоже, что они объявляются как глобальные переменные, но я не понимаю цели. Я видел этот шаблон во многих файлах в каталоге nptl и не мог понять, почему это делается.

  2. Что такое strong_alias? Быстрый поиск в Google содержит примеры того, как это используется, но я не нашел ссылки на какую-либо документацию.

  3. В чем причина предварения некоторых имен двумя символами подчеркивания __, а некоторых — одним подчеркиванием _. Большая часть кода, который я видел, использует два символа подчеркивания, но я думаю, что видел несколько мест, где используется один символ подчеркивания. Например, в pthreadP.h

    556 /* Старые интерфейсы очистки, все еще используемые в libc.so. */
    557 extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
    558 void (*подпрограмма) (void *), void *arg);
    559 extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
    560 in выполнить);
    561 extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
    562 void (*подпрограмма) (void *), void *arg);
    563 extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
    564 in выполнить);
    

По общему признанию, этот код предваряется комментарием, в котором говорится «старые интерфейсы очистки», но в любом случае мне интересно узнать о разнице и почему иногда используется одно подчеркивание, а иногда два.

Приветствуется любая информация по этим вопросам.

8
задан Gabriel Southern 14 March 2012 в 02:38
поделиться