Как найти реализацию барьерной функции? - PullRequest
3 голосов
/ 22 марта 2012

Я хочу реализовать новую барьерную функцию.

Прежде всего, я хочу знать о реализации барьера по умолчанию. (phtread, linux)

И я нахожу pthread.h (/ usr / include)

Но в этом файле я не могу найти реализацию барьера. только декларация.

1040 /* Functions to handle barriers.  */                                       
1041 
1042 /* Initialize BARRIER with the attributes in ATTR.  The barrier is
1043    opened when COUNT waiters arrived.  */
1044 extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
1045                  __const pthread_barrierattr_t *__restrict
1046                  __attr, unsigned int __count)
1047      __THROW __nonnull ((1));
1048 
1049 /* Destroy a previously dynamically initialized barrier BARRIER.  */
1050 extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
1051      __THROW __nonnull ((1));
1052 
1053 /* Wait on barrier BARRIER.  */
1054 extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
1055      __THROW __nonnull ((1));

Пожалуйста, научите меня, где реализация барьерной функции.

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Реализация барьера glibc находится в файлах pthread_barrier_init.c, pthread_barrier_wait.c и pthread_barrier_destroy.c. Реализация псевдокода в DESIGN-barrier.txt, вероятно, также представляет интерес.

2 голосов
/ 22 марта 2012

http://ptgmedia.pearsoncmg.com/images/0201633922/sourcecode/barrier.c

Посмотрите, как intrier_wait (барьер_т * барьер) использует счетчик для отслеживания количества ожидающих потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...