+++ /dev/null
-<!-- Copyright (C) 2003 Red Hat, Inc. -->
-<!-- This material may be distributed only subject to the terms -->
-<!-- and conditions set forth in the Open Publication License, v1.0 -->
-<!-- or later (the latest version is presently available at -->
-<!-- http://www.opencontent.org/openpub/). -->
-<!-- Distribution of the work or derivative of the work in any -->
-<!-- standard (paper) book form is prohibited unless prior -->
-<!-- permission is obtained from the copyright holder. -->
-<HTML
-><HEAD
-><TITLE
->Synchronization [POSIX Section 11]</TITLE
-><meta name="MSSmartTagsPreventParsing" content="TRUE">
-<META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
-REL="HOME"
-TITLE="eCos Reference Manual"
-HREF="ecos-ref.html"><LINK
-REL="UP"
-TITLE="POSIX Standard Support"
-HREF="posix-standard-support.html"><LINK
-REL="PREVIOUS"
-TITLE="Data Interchange Format [POSIX Section 10]"
-HREF="posix-data-interchange-format.html"><LINK
-REL="NEXT"
-TITLE="Memory Management [POSIX Section 12]"
-HREF="posix-memory-management.html"></HEAD
-><BODY
-CLASS="SECT1"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-SUMMARY="Header navigation table"
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="3"
-ALIGN="center"
->eCos Reference Manual</TH
-></TR
-><TR
-><TD
-WIDTH="10%"
-ALIGN="left"
-VALIGN="bottom"
-><A
-HREF="posix-data-interchange-format.html"
-ACCESSKEY="P"
->Prev</A
-></TD
-><TD
-WIDTH="80%"
-ALIGN="center"
-VALIGN="bottom"
->Chapter 31. POSIX Standard Support</TD
-><TD
-WIDTH="10%"
-ALIGN="right"
-VALIGN="bottom"
-><A
-HREF="posix-memory-management.html"
-ACCESSKEY="N"
->Next</A
-></TD
-></TR
-></TABLE
-><HR
-ALIGN="LEFT"
-WIDTH="100%"></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="POSIX-SYNCHRONIZATION">Synchronization [POSIX Section 11]</H1
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN13150">Functions Implemented</H2
-><TABLE
-BORDER="5"
-BGCOLOR="#E0E0F0"
-WIDTH="70%"
-><TR
-><TD
-><PRE
-CLASS="SCREEN"
->int sem_init(sem_t *sem, int pshared, unsigned int value);
-int sem_destroy(sem_t *sem);
-int sem_wait(sem_t *sem);
-int sem_trywait(sem_t *sem);
-int sem_post(sem_t *sem);
-int sem_getvalue(sem_t *sem, int *sval);
-int pthread_mutexattr_init( pthread_mutexattr_t *attr);
-int pthread_mutexattr_destroy( pthread_mutexattr_t *attr);
-int pthread_mutex_init(pthread_mutex_t *mutex,
- const pthread_mutexattr_t *mutex_attr);
-int pthread_mutex_destroy(pthread_mutex_t *mutex);
-int pthread_mutex_lock(pthread_mutex_t *mutex);
-int pthread_mutex_trylock(pthread_mutex_t *mutex);
-int pthread_mutex_unlock(pthread_mutex_t *mutex);
-int pthread_condattr_init(pthread_condattr_t *attr);
-int pthread_condattr_destroy(pthread_condattr_t *attr);
-int pthread_cond_init(pthread_cond_t *cond,
- const pthread_condattr_t *attr);
-int pthread_cond_destroy(pthread_cond_t *cond);
-int pthread_cond_signal(pthread_cond_t *cond);
-int pthread_cond_broadcast(pthread_cond_t *cond);
-int pthread_cond_wait(pthread_cond_t *cond,
- pthread_mutex_t *mutex);
-int pthread_cond_timedwait(pthread_cond_t *cond,
- pthread_mutex_t *mutex,
- const struct timespec *abstime);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN13153">Functions Omitted</H2
-><TABLE
-BORDER="5"
-BGCOLOR="#E0E0F0"
-WIDTH="70%"
-><TR
-><TD
-><PRE
-CLASS="SCREEN"
->sem_t *sem_open(const char *name, int oflag, ...); // TBA
-int sem_close(sem_t *sem); // TBA
-int sem_unlink(const char *name); // TBA
-int pthread_mutexattr_getpshared( const pthread_mutexattr_t *attr,
- int *pshared );
-int pthread_mutexattr_setpshared( const pthread_mutexattr_t *attr,
- int pshared );
-int pthread_condattr_getpshared( const pthread_condattr_t *attr,
- int *pshared);
-int pthread_condattr_setpshared( const pthread_condattr_t *attr,
- int pshared);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="SECT2"
-><H2
-CLASS="SECT2"
-><A
-NAME="AEN13156">Notes</H2
-><P
-></P
-><UL
-><LI
-><P
-> The presence of semaphores is controlled by the
- CYGPKG_POSIX_SEMAPHORES option. This in turn
- causes the _POSIX_SEMAPHORES feature test
- macro to be defined and the semaphore API to be made
- available.
- </P
-></LI
-><LI
-><P
-> The <SPAN
-CLASS="strong"
-><B
-CLASS="EMPHASIS"
->pshared</B
-></SPAN
-> argument to
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->sem_init()</I
-></SPAN
-> is not implemented,
- its value is ignored.
- </P
-></LI
-><LI
-><P
-> Functions <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->sem_open()</I
-></SPAN
->,
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->sem_close()</I
-></SPAN
-> and
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->sem_unlink()</I
-></SPAN
-> are present but
- always return an error (ENOSYS).
- </P
-></LI
-><LI
-><P
-> The exact priority inversion protocols supported may be
- controlled with the
- _POSIX_THREAD_PRIO_INHERIT and
- _POSIX_THREAD_PRIO_PROTECT
- configuration options.
- </P
-></LI
-><LI
-><P
-> {_POSIX_THREAD_PROCESS_SHARED} is
- not defined, so the
- <SPAN
-CLASS="strong"
-><B
-CLASS="EMPHASIS"
->process-shared</B
-></SPAN
-> mutex
- and condition variable attributes are not supported, and
- neither are the functions
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->pthread_mutexattr_getpshared()</I
-></SPAN
->,
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->pthread_mutexattr_setpshared()</I
-></SPAN
->,
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->pthread_condattr_getpshared()</I
-></SPAN
-> and
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->pthread_condattr_setpshared()</I
-></SPAN
->.
- </P
-></LI
-><LI
-><P
-> Condition variables do not become bound to a particular
- mutex when
- <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->pthread_cond_wait()</I
-></SPAN
-> is
- called. Hence different threads may wait on a condition
- variable with different mutexes. This is at variance with
- the standard, which requires a condition variable to
- become (dynamically) bound by the first waiter, and
- unbound when the last finishes. However, this difference
- is largely benign, and the cost of policing this feature
- is non-trivial.
- </P
-></LI
-></UL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><HR
-ALIGN="LEFT"
-WIDTH="100%"><TABLE
-SUMMARY="Footer navigation table"
-WIDTH="100%"
-BORDER="0"
-CELLPADDING="0"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
-><A
-HREF="posix-data-interchange-format.html"
-ACCESSKEY="P"
->Prev</A
-></TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="ecos-ref.html"
-ACCESSKEY="H"
->Home</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
-><A
-HREF="posix-memory-management.html"
-ACCESSKEY="N"
->Next</A
-></TD
-></TR
-><TR
-><TD
-WIDTH="33%"
-ALIGN="left"
-VALIGN="top"
->Data Interchange Format [POSIX Section 10]</TD
-><TD
-WIDTH="34%"
-ALIGN="center"
-VALIGN="top"
-><A
-HREF="posix-standard-support.html"
-ACCESSKEY="U"
->Up</A
-></TD
-><TD
-WIDTH="33%"
-ALIGN="right"
-VALIGN="top"
->Memory Management [POSIX Section 12]</TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file