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.\" 27*b6413b6dSPedro F. Giffuni.Dd August 17, 2018 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 40*b6413b6dSPedro F. Giffuni.Fn pthread_barrier_init "pthread_barrier_t *restrict 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 7860404ec9SJilles TjoelkerIn 799cbda590SRuslan Ermilov.Lb libthr 809cbda590SRuslan Ermilovthe 819cbda590SRuslan Ermilov.Dv PTHREAD_BARRIER_SERIAL_THREAD 829cbda590SRuslan Ermilovreturn value will 839cbda590SRuslan Ermilovalways be returned by the last thread to reach the barrier. 84715a0284SRuslan Ermilov.Sh RETURN VALUES 85d4d7df5cSMike MakonnenIf successful, 86d4d7df5cSMike Makonnenboth 87d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 88d4d7df5cSMike Makonnenand 89d4d7df5cSMike Makonnen.Fn pthread_barrier_init 90d4d7df5cSMike Makonnenwill return zero. 91715a0284SRuslan ErmilovOtherwise, an error number will be returned to indicate the error. 92d4d7df5cSMike MakonnenIf the call to 93d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 94715a0284SRuslan Ermilovis successful, all but one of the threads will return zero. 95715a0284SRuslan ErmilovThat one thread will return 96715a0284SRuslan Ermilov.Dv PTHREAD_BARRIER_SERIAL_THREAD . 97715a0284SRuslan ErmilovOtherwise, an error number will be returned to indicate the error. 98d4d7df5cSMike Makonnen.Pp 99715a0284SRuslan ErmilovNone of these functions will return 100715a0284SRuslan Ermilov.Er EINTR . 101d4d7df5cSMike Makonnen.Sh ERRORS 102d4d7df5cSMike MakonnenThe 103d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 104d4d7df5cSMike Makonnenfunction will fail if: 105d4d7df5cSMike Makonnen.Bl -tag -width Er 106d4d7df5cSMike Makonnen.It Bq Er EBUSY 107d4d7df5cSMike MakonnenAn attempt was made to destroy 108d4d7df5cSMike Makonnen.Fa barrier 109d4d7df5cSMike Makonnenwhile it was in use. 110d4d7df5cSMike Makonnen.El 111d4d7df5cSMike Makonnen.Pp 112d4d7df5cSMike MakonnenThe 113d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy 114d4d7df5cSMike Makonnenand 115d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 116d4d7df5cSMike Makonnenfunctions may fail if: 117d4d7df5cSMike Makonnen.Bl -tag -width Er 118d4d7df5cSMike Makonnen.It Bq Er EINVAL 119d4d7df5cSMike MakonnenThe value specified by 120d4d7df5cSMike Makonnen.Fa barrier 121d4d7df5cSMike Makonnenis invalid. 122d4d7df5cSMike Makonnen.El 123d4d7df5cSMike Makonnen.Pp 124d4d7df5cSMike MakonnenThe 125d4d7df5cSMike Makonnen.Fn pthread_barrier_init 126d4d7df5cSMike Makonnenfunction will fail if: 127d4d7df5cSMike Makonnen.Bl -tag -width Er 128d4d7df5cSMike Makonnen.It Bq Er EAGAIN 129d4d7df5cSMike MakonnenThe system lacks resources, 130d4d7df5cSMike Makonnenother than memory, 131d4d7df5cSMike Makonnento initialize 132d4d7df5cSMike Makonnen.Fa barrier . 133d4d7df5cSMike Makonnen.It Bq Er EINVAL 134d4d7df5cSMike MakonnenThe 135d4d7df5cSMike Makonnen.Fa count 136d4d7df5cSMike Makonnenargument is less than 1. 137d4d7df5cSMike Makonnen.It Bq Er ENOMEM 138d4d7df5cSMike MakonnenInsufficient memory to initialize 139d4d7df5cSMike Makonnen.Fa barrier . 140d4d7df5cSMike Makonnen.El 141d4d7df5cSMike Makonnen.Sh SEE ALSO 142d4d7df5cSMike Makonnen.Xr pthread_barrierattr 3 143d4d7df5cSMike Makonnen.Sh HISTORY 144d4d7df5cSMike MakonnenThe 145d4d7df5cSMike Makonnen.Fn pthread_barrier_destroy , 146d4d7df5cSMike Makonnen.Fn pthread_barrier_init 147d4d7df5cSMike Makonnenand 148d4d7df5cSMike Makonnen.Fn pthread_barrier_wait 149d4d7df5cSMike Makonnenfunctions first appeared in 1503e9ed1efSRuslan Ermilov.Lb libkse 151d4d7df5cSMike Makonnenin 152d4d7df5cSMike Makonnen.Fx 5.2 , 153d4d7df5cSMike Makonnenand in 154d4d7df5cSMike Makonnen.Lb libthr 155d4d7df5cSMike Makonnenin 156d4d7df5cSMike Makonnen.Fx 5.3 . 157