diff options
| author | rpj <rpj> | 2002-02-08 01:51:17 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2002-02-08 01:51:17 +0000 | 
| commit | b29903300adc22ed277bbaa356aca8ed0c245957 (patch) | |
| tree | 02921a99a145dda1e78a315cc75016443839f2e0 /barrier_attr_setpshared.c | |
| parent | 14118935d2d6863a4746223d8e22c2e58ffebab5 (diff) | |
Copyright notice updates; module splitting; POSIX version
conditional compilation; refinements; bug fixes. See the ChangeLog.
Diffstat (limited to 'barrier_attr_setpshared.c')
| -rw-r--r-- | barrier_attr_setpshared.c | 120 | 
1 files changed, 120 insertions, 0 deletions
diff --git a/barrier_attr_setpshared.c b/barrier_attr_setpshared.c new file mode 100644 index 0000000..4ad5c52 --- /dev/null +++ b/barrier_attr_setpshared.c @@ -0,0 +1,120 @@ +/* + * barrier_attr_setpshared.c + * + * Description: + * This translation unit implements barrier primitives. + * + * -------------------------------------------------------------------------- + * + *      Pthreads-win32 - POSIX Threads Library for Win32 + *      Copyright(C) 1998 John E. Bossom + *      Copyright(C) 1999,2002 Pthreads-win32 contributors + * + *      Contact Email: rpj@ise.canberra.edu.au + * + *      The current list of contributors is contained + *      in the file CONTRIBUTORS included with the source + *      code distribution. The list can also be seen at the + *      following World Wide Web location: + *      http://sources.redhat.com/pthreads-win32/contributors.html + * + *      This library is free software; you can redistribute it and/or + *      modify it under the terms of the GNU Lesser General Public + *      License as published by the Free Software Foundation; either + *      version 2 of the License, or (at your option) any later version. + * + *      This library is distributed in the hope that it will be useful, + *      but WITHOUT ANY WARRANTY; without even the implied warranty of + *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + *      Lesser General Public License for more details. + * + *      You should have received a copy of the GNU Lesser General Public + *      License along with this library in the file COPYING.LIB; + *      if not, write to the Free Software Foundation, Inc., + *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include "pthread.h" +#include "implement.h" + + +int +pthread_barrierattr_setpshared (pthread_barrierattr_t * attr, +                                int pshared) +     /* +      * ------------------------------------------------------ +      * DOCPUBLIC +      *      Barriers created with 'attr' can be shared between +      *      processes if pthread_barrier_t variable is allocated +      *      in memory shared by these processes. +      * +      * PARAMETERS +      *      attr +      *              pointer to an instance of pthread_barrierattr_t +      * +      *      pshared +      *              must be one of: +      * +      *                      PTHREAD_PROCESS_SHARED +      *                              May be shared if in shared memory +      * +      *                      PTHREAD_PROCESS_PRIVATE +      *                              Cannot be shared. +      * +      * DESCRIPTION +      *      Mutexes creatd with 'attr' can be shared between +      *      processes if pthread_barrier_t variable is allocated +      *      in memory shared by these processes. +      * +      *      NOTES: +      *              1)      pshared barriers MUST be allocated in shared +      *                      memory. +      * +      *              2)      The following macro is defined if shared barriers +      *                      are supported: +      *                              _POSIX_THREAD_PROCESS_SHARED +      * +      * RESULTS +      *              0               successfully set attribute, +      *              EINVAL          'attr' or pshared is invalid, +      *              ENOSYS          PTHREAD_PROCESS_SHARED not supported, +      * +      * ------------------------------------------------------ +      */ +{ +  int result; + +  if ((attr != NULL && *attr != NULL) && +      ((pshared == PTHREAD_PROCESS_SHARED) || +       (pshared == PTHREAD_PROCESS_PRIVATE))) +    { +      if (pshared == PTHREAD_PROCESS_SHARED) +        { + +#if !defined( _POSIX_THREAD_PROCESS_SHARED ) + +          result = ENOSYS; +          pshared = PTHREAD_PROCESS_PRIVATE; + +#else + +          result = 0; + +#endif /* _POSIX_THREAD_PROCESS_SHARED */ + +        } +      else +        { +          result = 0; +        } + +      (*attr)->pshared = pshared; +    } +  else +    { +      result = EINVAL; +    } + +  return (result); + +}                               /* pthread_barrierattr_setpshared */  | 
