1d4d7df5cSMike Makonnen.\" Copyright (c) 2004 Michael Telahun Makonnen 2d4d7df5cSMike Makonnen.\" All rights reserved. 3d4d7df5cSMike Makonnen.\" 4d4d7df5cSMike Makonnen.\" Redistribution and use in source and binary forms, with or without 5d4d7df5cSMike Makonnen.\" modification, are permitted provided that the following conditions 6d4d7df5cSMike Makonnen.\" are met: 7d4d7df5cSMike Makonnen.\" 1. Redistributions of source code must retain the above copyright 8d4d7df5cSMike Makonnen.\" notice, this list of conditions and the following disclaimer. 9d4d7df5cSMike Makonnen.\" 2. Redistributions in binary form must reproduce the above copyright 10d4d7df5cSMike Makonnen.\" notice, this list of conditions and the following disclaimer in the 11d4d7df5cSMike Makonnen.\" documentation and/or other materials provided with the distribution. 12d4d7df5cSMike Makonnen.\" 13d4d7df5cSMike Makonnen.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14d4d7df5cSMike Makonnen.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15d4d7df5cSMike Makonnen.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16d4d7df5cSMike Makonnen.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17d4d7df5cSMike Makonnen.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18d4d7df5cSMike Makonnen.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19d4d7df5cSMike Makonnen.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20d4d7df5cSMike Makonnen.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21d4d7df5cSMike Makonnen.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22d4d7df5cSMike Makonnen.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23d4d7df5cSMike Makonnen.\" SUCH DAMAGE. 24d4d7df5cSMike Makonnen.\" 25d4d7df5cSMike Makonnen.\" $FreeBSD$ 26d4d7df5cSMike Makonnen.\" 27d4d7df5cSMike Makonnen.Dd February 19, 2004 28715a0284SRuslan Ermilov.Dt PTHREAD_BARRIER 3 29d4d7df5cSMike Makonnen.Os 30d4d7df5cSMike Makonnen.Sh NAME 31715a0284SRuslan Ermilov.Nm pthread_barrier_destroy , pthread_barrier_init , pthread_barrier_wait 32d4d7df5cSMike Makonnen.Nd "destroy, initialize or wait on a barrier object" 33d4d7df5cSMike Makonnen.Sh LIBRARY 34d4d7df5cSMike Makonnen.Lb libpthread 35d4d7df5cSMike Makonnen.Sh SYNOPSIS 36d4d7df5cSMike Makonnen.In pthread.h 37d4d7df5cSMike Makonnen.Ft int 38d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy "pthread_barrier_t *barrier" 39d4d7df5cSMike Makonnen.Ft int 404294a24eSRuslan Ermilov.Fn pthread_barrier_init "pthread_barrier_t *barrier" "const pthread_barrierattr_t *attr" "unsigned count" 41d4d7df5cSMike Makonnen.Ft int 42d4d7df5cSMike Makonnen.Fn pthread_barrier_wait "pthread_barrier_t *barrier" 43d4d7df5cSMike Makonnen.Sh DESCRIPTION 44d4d7df5cSMike MakonnenThe 45d4d7df5cSMike Makonnen.Fn pthread_barrier_init 46d4d7df5cSMike Makonnenfunction will initialize 47d4d7df5cSMike Makonnen.Fa barrier 48d4d7df5cSMike Makonnenwith attributes specified in 49d4d7df5cSMike Makonnen.Fa attr , 50715a0284SRuslan Ermilovor if it is 51715a0284SRuslan Ermilov.Dv NULL , 52d4d7df5cSMike Makonnenwith default attributes. 53d4d7df5cSMike MakonnenThe number of threads that must call 54d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 55d4d7df5cSMike Makonnenbefore any of the waiting threads can be 56d4d7df5cSMike Makonnenreleased is specified by 57d4d7df5cSMike Makonnen.Fa count . 58d4d7df5cSMike MakonnenThe 59d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 60d4d7df5cSMike Makonnenfunction will destroy 61d4d7df5cSMike Makonnen.Fa barrier 62d4d7df5cSMike Makonnenand release any resources that may have been allocated on its behalf. 63d4d7df5cSMike Makonnen.Pp 64d4d7df5cSMike MakonnenThe 65d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 66d4d7df5cSMike Makonnenfunction will synchronize calling threads at 67d4d7df5cSMike Makonnen.Fa barrier . 68d4d7df5cSMike MakonnenThe threads will be blocked from 69d4d7df5cSMike Makonnenmaking further progress until 70d4d7df5cSMike Makonnena sufficient number of threads calls this function. 71d4d7df5cSMike MakonnenThe number of threads that must call it before 72d4d7df5cSMike Makonnenany of them will be released is determined by the 73d4d7df5cSMike Makonnen.Fa count 74d4d7df5cSMike Makonnenargument to 75d4d7df5cSMike Makonnen.Fn pthread_barrier_init . 76d4d7df5cSMike MakonnenOnce the threads have been released the barrier will be reset. 779cbda590SRuslan Ermilov.Sh IMPLEMENTATION NOTES 789cbda590SRuslan ErmilovIn both 793e9ed1efSRuslan Ermilov.Lb libkse 809cbda590SRuslan Ermilovand 819cbda590SRuslan Ermilov.Lb libthr 829cbda590SRuslan Ermilovthe 839cbda590SRuslan Ermilov.Dv PTHREAD_BARRIER_SERIAL_THREAD 849cbda590SRuslan Ermilovreturn value will 859cbda590SRuslan Ermilovalways be returned by the last thread to reach the barrier. 86715a0284SRuslan Ermilov.Sh RETURN VALUES 87d4d7df5cSMike MakonnenIf successful, 88d4d7df5cSMike Makonnenboth 89d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 90d4d7df5cSMike Makonnenand 91d4d7df5cSMike Makonnen.Fn pthread_barrier_init 92d4d7df5cSMike Makonnenwill return zero. 93715a0284SRuslan ErmilovOtherwise, an error number will be returned to indicate the error. 94d4d7df5cSMike MakonnenIf the call to 95d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 96715a0284SRuslan Ermilovis successful, all but one of the threads will return zero. 97715a0284SRuslan ErmilovThat one thread will return 98715a0284SRuslan Ermilov.Dv PTHREAD_BARRIER_SERIAL_THREAD . 99715a0284SRuslan ErmilovOtherwise, an error number will be returned to indicate the error. 100d4d7df5cSMike Makonnen.Pp 101715a0284SRuslan ErmilovNone of these functions will return 102715a0284SRuslan Ermilov.Er EINTR . 103d4d7df5cSMike Makonnen.Sh ERRORS 104d4d7df5cSMike MakonnenThe 105d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 106d4d7df5cSMike Makonnenfunction will fail if: 107d4d7df5cSMike Makonnen.Bl -tag -width Er 108d4d7df5cSMike Makonnen.It Bq Er EBUSY 109d4d7df5cSMike MakonnenAn attempt was made to destroy 110d4d7df5cSMike Makonnen.Fa barrier 111d4d7df5cSMike Makonnenwhile it was in use. 112d4d7df5cSMike Makonnen.El 113d4d7df5cSMike Makonnen.Pp 114d4d7df5cSMike MakonnenThe 115d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 116d4d7df5cSMike Makonnenand 117d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 118d4d7df5cSMike Makonnenfunctions may fail if: 119d4d7df5cSMike Makonnen.Bl -tag -width Er 120d4d7df5cSMike Makonnen.It Bq Er EINVAL 121d4d7df5cSMike MakonnenThe value specified by 122d4d7df5cSMike Makonnen.Fa barrier 123d4d7df5cSMike Makonnenis invalid. 124d4d7df5cSMike Makonnen.El 125d4d7df5cSMike Makonnen.Pp 126d4d7df5cSMike MakonnenThe 127d4d7df5cSMike Makonnen.Fn pthread_barrier_init 128d4d7df5cSMike Makonnenfunction will fail if: 129d4d7df5cSMike Makonnen.Bl -tag -width Er 130d4d7df5cSMike Makonnen.It Bq Er EAGAIN 131d4d7df5cSMike MakonnenThe system lacks resources, 132d4d7df5cSMike Makonnenother than memory, 133d4d7df5cSMike Makonnento initialize 134d4d7df5cSMike Makonnen.Fa barrier . 135d4d7df5cSMike Makonnen.It Bq Er EINVAL 136d4d7df5cSMike MakonnenThe 137d4d7df5cSMike Makonnen.Fa count 138d4d7df5cSMike Makonnenargument is less than 1. 139d4d7df5cSMike Makonnen.It Bq Er ENOMEM 140d4d7df5cSMike MakonnenInsufficient memory to initialize 141d4d7df5cSMike Makonnen.Fa barrier . 142d4d7df5cSMike Makonnen.El 143d4d7df5cSMike Makonnen.Sh SEE ALSO 144d4d7df5cSMike Makonnen.Xr pthread_barrierattr 3 145d4d7df5cSMike Makonnen.Sh HISTORY 146d4d7df5cSMike MakonnenThe 147d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy , 148d4d7df5cSMike Makonnen.Fn pthread_barrier_init 149d4d7df5cSMike Makonnenand 150d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 151d4d7df5cSMike Makonnenfunctions first appeared in 1523e9ed1efSRuslan Ermilov.Lb libkse 153d4d7df5cSMike Makonnenin 154d4d7df5cSMike Makonnen.Fx 5.2 , 155d4d7df5cSMike Makonnenand in 156d4d7df5cSMike Makonnen.Lb libthr 157d4d7df5cSMike Makonnenin 158d4d7df5cSMike Makonnen.Fx 5.3 . 159