我想实现新的屏障功能。
首先,我想了解默认屏障实现。 (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));
请教我哪里有屏障功能实施。
答案 0 :(得分:4)
glibc屏障实施位于pthread_barrier_init.c
,pthread_barrier_wait.c
和pthread_barrier_destroy.c
文件中。 DESIGN-barrier.txt
中的伪代码实现可能也很有意义。
答案 1 :(得分:2)
http://ptgmedia.pearsoncmg.com/images/0201633922/sourcecode/barrier.c
看看int barrier_wait(barrier_t * barrier)如何使用计数器来跟踪挂起的线程数。