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.\" 25*b6413b6dSPedro F. Giffuni.Dd August 17, 2018 26715a0284SRuslan Ermilov.Dt PTHREAD_BARRIER 3 27d4d7df5cSMike Makonnen.Os 28d4d7df5cSMike Makonnen.Sh NAME 29715a0284SRuslan Ermilov.Nm pthread_barrier_destroy , pthread_barrier_init , pthread_barrier_wait 30d4d7df5cSMike Makonnen.Nd "destroy, initialize or wait on a barrier object" 31d4d7df5cSMike Makonnen.Sh LIBRARY 32d4d7df5cSMike Makonnen.Lb libpthread 33d4d7df5cSMike Makonnen.Sh SYNOPSIS 34d4d7df5cSMike Makonnen.In pthread.h 35d4d7df5cSMike Makonnen.Ft int 36d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy "pthread_barrier_t *barrier" 37d4d7df5cSMike Makonnen.Ft int 38*b6413b6dSPedro F. Giffuni.Fn pthread_barrier_init "pthread_barrier_t *restrict barrier" "const pthread_barrierattr_t *attr" "unsigned count" 39d4d7df5cSMike Makonnen.Ft int 40d4d7df5cSMike Makonnen.Fn pthread_barrier_wait "pthread_barrier_t *barrier" 41d4d7df5cSMike Makonnen.Sh DESCRIPTION 42d4d7df5cSMike MakonnenThe 43d4d7df5cSMike Makonnen.Fn pthread_barrier_init 44d4d7df5cSMike Makonnenfunction will initialize 45d4d7df5cSMike Makonnen.Fa barrier 46d4d7df5cSMike Makonnenwith attributes specified in 47d4d7df5cSMike Makonnen.Fa attr , 48715a0284SRuslan Ermilovor if it is 49715a0284SRuslan Ermilov.Dv NULL , 50d4d7df5cSMike Makonnenwith default attributes. 51d4d7df5cSMike MakonnenThe number of threads that must call 52d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 53d4d7df5cSMike Makonnenbefore any of the waiting threads can be 54d4d7df5cSMike Makonnenreleased is specified by 55d4d7df5cSMike Makonnen.Fa count . 56d4d7df5cSMike MakonnenThe 57d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 58d4d7df5cSMike Makonnenfunction will destroy 59d4d7df5cSMike Makonnen.Fa barrier 60d4d7df5cSMike Makonnenand release any resources that may have been allocated on its behalf. 61d4d7df5cSMike Makonnen.Pp 62d4d7df5cSMike MakonnenThe 63d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 64d4d7df5cSMike Makonnenfunction will synchronize calling threads at 65d4d7df5cSMike Makonnen.Fa barrier . 66d4d7df5cSMike MakonnenThe threads will be blocked from 67d4d7df5cSMike Makonnenmaking further progress until 68d4d7df5cSMike Makonnena sufficient number of threads calls this function. 69d4d7df5cSMike MakonnenThe number of threads that must call it before 70d4d7df5cSMike Makonnenany of them will be released is determined by the 71d4d7df5cSMike Makonnen.Fa count 72d4d7df5cSMike Makonnenargument to 73d4d7df5cSMike Makonnen.Fn pthread_barrier_init . 74d4d7df5cSMike MakonnenOnce the threads have been released the barrier will be reset. 759cbda590SRuslan Ermilov.Sh IMPLEMENTATION NOTES 7660404ec9SJilles TjoelkerIn 779cbda590SRuslan Ermilov.Lb libthr 789cbda590SRuslan Ermilovthe 799cbda590SRuslan Ermilov.Dv PTHREAD_BARRIER_SERIAL_THREAD 809cbda590SRuslan Ermilovreturn value will 819cbda590SRuslan Ermilovalways be returned by the last thread to reach the barrier. 82715a0284SRuslan Ermilov.Sh RETURN VALUES 83d4d7df5cSMike MakonnenIf successful, 84d4d7df5cSMike Makonnenboth 85d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 86d4d7df5cSMike Makonnenand 87d4d7df5cSMike Makonnen.Fn pthread_barrier_init 88d4d7df5cSMike Makonnenwill return zero. 89715a0284SRuslan ErmilovOtherwise, an error number will be returned to indicate the error. 90d4d7df5cSMike MakonnenIf the call to 91d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 92715a0284SRuslan Ermilovis successful, all but one of the threads will return zero. 93715a0284SRuslan ErmilovThat one thread will return 94715a0284SRuslan Ermilov.Dv PTHREAD_BARRIER_SERIAL_THREAD . 95715a0284SRuslan ErmilovOtherwise, an error number will be returned to indicate the error. 96d4d7df5cSMike Makonnen.Pp 97715a0284SRuslan ErmilovNone of these functions will return 98715a0284SRuslan Ermilov.Er EINTR . 99d4d7df5cSMike Makonnen.Sh ERRORS 100d4d7df5cSMike MakonnenThe 101d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 102d4d7df5cSMike Makonnenfunction will fail if: 103d4d7df5cSMike Makonnen.Bl -tag -width Er 104d4d7df5cSMike Makonnen.It Bq Er EBUSY 105d4d7df5cSMike MakonnenAn attempt was made to destroy 106d4d7df5cSMike Makonnen.Fa barrier 107d4d7df5cSMike Makonnenwhile it was in use. 108d4d7df5cSMike Makonnen.El 109d4d7df5cSMike Makonnen.Pp 110d4d7df5cSMike MakonnenThe 111d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 112d4d7df5cSMike Makonnenand 113d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 114d4d7df5cSMike Makonnenfunctions may fail if: 115d4d7df5cSMike Makonnen.Bl -tag -width Er 116d4d7df5cSMike Makonnen.It Bq Er EINVAL 117d4d7df5cSMike MakonnenThe value specified by 118d4d7df5cSMike Makonnen.Fa barrier 119d4d7df5cSMike Makonnenis invalid. 120d4d7df5cSMike Makonnen.El 121d4d7df5cSMike Makonnen.Pp 122d4d7df5cSMike MakonnenThe 123d4d7df5cSMike Makonnen.Fn pthread_barrier_init 124d4d7df5cSMike Makonnenfunction will fail if: 125d4d7df5cSMike Makonnen.Bl -tag -width Er 126d4d7df5cSMike Makonnen.It Bq Er EAGAIN 127d4d7df5cSMike MakonnenThe system lacks resources, 128d4d7df5cSMike Makonnenother than memory, 129d4d7df5cSMike Makonnento initialize 130d4d7df5cSMike Makonnen.Fa barrier . 131d4d7df5cSMike Makonnen.It Bq Er EINVAL 132d4d7df5cSMike MakonnenThe 133d4d7df5cSMike Makonnen.Fa count 134d4d7df5cSMike Makonnenargument is less than 1. 135d4d7df5cSMike Makonnen.It Bq Er ENOMEM 136d4d7df5cSMike MakonnenInsufficient memory to initialize 137d4d7df5cSMike Makonnen.Fa barrier . 138d4d7df5cSMike Makonnen.El 139d4d7df5cSMike Makonnen.Sh SEE ALSO 140d4d7df5cSMike Makonnen.Xr pthread_barrierattr 3 141d4d7df5cSMike Makonnen.Sh HISTORY 142d4d7df5cSMike MakonnenThe 143d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy , 144d4d7df5cSMike Makonnen.Fn pthread_barrier_init 145d4d7df5cSMike Makonnenand 146d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 147d4d7df5cSMike Makonnenfunctions first appeared in 1483e9ed1efSRuslan Ermilov.Lb libkse 149d4d7df5cSMike Makonnenin 150d4d7df5cSMike Makonnen.Fx 5.2 , 151d4d7df5cSMike Makonnenand in 152d4d7df5cSMike Makonnen.Lb libthr 153d4d7df5cSMike Makonnenin 154d4d7df5cSMike Makonnen.Fx 5.3 . 155