123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616 |
- /*++
- Copyright (c) 2015 Minoca Corp.
- This file is licensed under the terms of the GNU Lesser General Public
- License version 3. Alternative licensing terms are available. Contact
- info@minocacorp.com for details.
- Module Name:
- pthread.h
- Abstract:
- This header contains definitions for the POSIX thread library.
- Author:
- Evan Green 27-Apr-2015
- --*/
- #ifndef _PTHREAD_H
- #define _PTHREAD_H
- //
- // ------------------------------------------------------------------- Includes
- //
- #include <libcbase.h>
- #include <sched.h>
- #include <stdarg.h>
- #include <stddef.h>
- //
- // --------------------------------------------------------------------- Macros
- //
- //
- // These macros push and pop a cleanup item. They must be used in matching
- // pairs. They introduce braces, so the use of setjmp, longjmp, return, break,
- // or continue in between matching calls to push and pop will cause undefined
- // results. Interestingly enough, this is POSIX compliant behavior.
- //
- #define pthread_cleanup_push(_CleanupRoutine, _Argument) \
- do { \
- __pthread_cleanup_t __CleanupItem; \
- __pthread_cleanup_push(&__CleanupItem, (_CleanupRoutine), (_Argument));
- //
- // The execute parameter is an integer that is zero if the cleanup item should
- // just be popped, or non-zero if it should be popped and executed.
- //
- #define pthread_cleanup_pop(_Execute) \
- __pthread_cleanup_pop(&__CleanupItem, (_Execute)); \
- } while (0);
- //
- // ---------------------------------------------------------------- Definitions
- //
- #ifdef __cplusplus
- extern "C" {
- #endif
- //
- // Currently the pthread library is built into the C library, so its API
- // decorator should be whatever the C library is.
- //
- #define PTHREAD_API LIBC_API
- //
- // Define mutex types.
- //
- //
- // This type of mutex does not detect deadlock.
- //
- #define PTHREAD_MUTEX_NORMAL 0
- //
- // This type of mutex provides error checking. A thread attempting to relock
- // this mutex without first unlocking fails. A thread attempting to unlock a
- // mutex that another thread has locked will also fail.
- //
- #define PTHREAD_MUTEX_ERRORCHECK 1
- //
- // This type of mutex allows a thread to succeed a call to acquire the mutex
- // after already acquiring the mutex. A count will be maintained of acquire
- // counts for the owning thread, and the mutex will only be released to other
- // threads when the acquire count drops to zero.
- //
- #define PTHREAD_MUTEX_RECURSIVE 2
- //
- // This type is the default type for an initialized mutex.
- //
- #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
- //
- // This value indicates an object such as a mutex is private to the process.
- //
- #define PTHREAD_PROCESS_PRIVATE 0
- //
- // This value indicates an object such as a mutex is shared across all
- // processes.
- //
- #define PTHREAD_PROCESS_SHARED 1
- //
- // This (default) value indicates that use of the thread ID as a parameter to
- // the thread join or detach routines is permitted.
- //
- #define PTHREAD_CREATE_JOINABLE 0
- //
- // This value indicates that the use of the thread ID in the join or detach
- // routines is prohibited, as the thread may exit and the ID may be reused at
- // any time.
- //
- #define PTHREAD_CREATE_DETACHED 1
- //
- // This value indicates that created threads contend with all other threads
- // in the system for CPU resources.
- //
- #define PTHREAD_SCOPE_SYSTEM 0
- //
- // This value indicates that created threads only contend with other threads
- // in their parent process for CPU resources. This is not currently supported.
- //
- #define PTHREAD_SCOPE_PROCESS 1
- //
- // This value indicates that thread cancellation is enabled: thread can be
- // canceled.
- //
- #define PTHREAD_CANCEL_ENABLE 0
- //
- // This value indicates that thread cancellation is currently disabled.
- //
- #define PTHREAD_CANCEL_DISABLE 1
- //
- // This value indicates that thread cancellation requests will be deferred
- // until the next cancellation point.
- //
- #define PTHREAD_CANCEL_DEFERRED 0
- //
- // This value indicates that thread cancellation requests will be processed
- // immediately.
- //
- #define PTHREAD_CANCEL_ASYNCHRONOUS 1
- //
- // This thread return value indicates that the thread was canceled, rather than
- // returning naturally.
- //
- #define PTHREAD_CANCELED ((void *)-1)
- //
- // Define the constant initializer for a mutex, which can be assigned as the
- // initial value for a global variable mutex.
- //
- #define PTHREAD_MUTEX_INITIALIZER {{0}}
- //
- // Define the constant initializer for a recursive mutex.
- //
- #define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
- {{0, 0, 0, 0x40}}
- //
- // Define the constant initializer for an error-checking mutex.
- //
- #define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
- {{0, 0, 0, 0x80}}
- //
- // Define the constant initializer for a condition variable.
- //
- #define PTHREAD_COND_INITIALIZER {{0}}
- //
- // Define the constant initializer for a read/write lock.
- //
- #define PTHREAD_RWLOCK_INITIALIZER {{0}}
- //
- // Define the constant initializer for a once object.
- //
- #define PTHREAD_ONCE_INIT 0
- //
- // Define the value returned to one arbitrary thread after a pthread barrier
- // wait is satisfied. This value must be distinct from all error numbers and
- // cannot be 0.
- //
- #define PTHREAD_BARRIER_SERIAL_THREAD -1
- //
- // ------------------------------------------------------ Data Type Definitions
- //
- typedef
- void
- (*__pthread_cleanup_func_t) (
- void *Parameter
- );
- /*++
- Routine Description:
- This routine prototype represents a function that is called when a thread
- is exiting.
- Arguments:
- Parameter - Supplies a pointer's worth of data.
- Return Value:
- None.
- --*/
- /*++
- Structure Description:
- This structure stores the context for a thread cleanup routine.
- Members:
- __cleanup_prev - Stores a pointer to the previous item on the stack.
- __cleanup_routine - Stores a pointer to the routine to call.
- __cleanup_arg - Stores an argument to pass to the cleanup routine.
- --*/
- typedef struct __pthread_cleanup_t {
- struct __pthread_cleanup_t *__cleanup_prev;
- __pthread_cleanup_func_t __cleanup_routine;
- void *__cleanup_arg;
- } __pthread_cleanup_t;
- //
- // -------------------------------------------------------------------- Globals
- //
- //
- // -------------------------------------------------------- Function Prototypes
- //
- PTHREAD_API
- int
- pthread_mutex_init (
- pthread_mutex_t *Mutex,
- const pthread_mutexattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a mutex.
- Arguments:
- Mutex - Supplies a pointer to the mutex to initialize.
- Attribute - Supplies an optional pointer to the initialized attributes to
- set in the mutex.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutex_destroy (
- pthread_mutex_t *Mutex
- );
- /*++
- Routine Description:
- This routine destroys a mutex.
- Arguments:
- Mutex - Supplies a pointer to the mutex to destroy.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutex_lock (
- pthread_mutex_t *Mutex
- );
- /*++
- Routine Description:
- This routine acquires a mutex.
- Arguments:
- Mutex - Supplies a pointer to the mutex to acquire.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutex_unlock (
- pthread_mutex_t *Mutex
- );
- /*++
- Routine Description:
- This routine releases a mutex.
- Arguments:
- Mutex - Supplies a pointer to the mutex to release.
- Return Value:
- 0 on success.
- EPERM if this thread is not the thread that originally acquire the mutex.
- --*/
- PTHREAD_API
- int
- pthread_mutex_trylock (
- pthread_mutex_t *Mutex
- );
- /*++
- Routine Description:
- This routine attempts to acquire the given mutex once.
- Arguments:
- Mutex - Supplies a pointer to the mutex to attempt to acquire.
- Return Value:
- 0 on success.
- EBUSY if the mutex is already held by another thread and this is an error
- checking mutex.
- --*/
- PTHREAD_API
- int
- pthread_mutex_timedlock (
- pthread_mutex_t *Mutex,
- const struct timespec *AbsoluteTimeout
- );
- /*++
- Routine Description:
- This routine attempts to acquire a mutex, giving up after a specified
- deadline.
- Arguments:
- Mutex - Supplies a pointer to the mutex to acquire.
- AbsoluteTimeout - Supplies the absolute timeout after which the attempt
- shall fail and time out.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutexattr_init (
- pthread_mutexattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a mutex attribute object.
- Arguments:
- Attribute - Supplies a pointer to the attribute to initialize.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutexattr_destroy (
- pthread_mutexattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine destroys a mutex attribute object.
- Arguments:
- Attribute - Supplies a pointer to the attribute to destroy.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutexattr_gettype (
- const pthread_mutexattr_t *Attribute,
- int *Type
- );
- /*++
- Routine Description:
- This routine returns the mutex type given an attribute that was previously
- set.
- Arguments:
- Attribute - Supplies a pointer to the attribute to get the type from.
- Type - Supplies a pointer where the mutex type will be returned on success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutexattr_settype (
- pthread_mutexattr_t *Attribute,
- int Type
- );
- /*++
- Routine Description:
- This routine sets a mutex type in the given mutex attributes object.
- Arguments:
- Attribute - Supplies a pointer to the attribute to set the type in.
- Type - Supplies the mutex type to set. See PTHREAD_MUTEX_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutexattr_getpshared (
- const pthread_mutexattr_t *Attribute,
- int *Shared
- );
- /*++
- Routine Description:
- This routine returns the mutex sharing type given an attribute that was
- previously set.
- Arguments:
- Attribute - Supplies a pointer to the attribute to get the sharing
- information from.
- Shared - Supplies a pointer where the sharing type will be returned on
- success. See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_mutexattr_setpshared (
- pthread_mutexattr_t *Attribute,
- int Shared
- );
- /*++
- Routine Description:
- This routine sets a mutex sharing type in the given mutex attributes object.
- Arguments:
- Attribute - Supplies a pointer to the attribute to set the type in.
- Shared - Supplies the mutex type to set. See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cond_init (
- pthread_cond_t *Condition,
- pthread_condattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a condition variable structure.
- Arguments:
- Condition - Supplies a pointer to the condition variable structure.
- Attribute - Supplies an optional pointer to the condition variable
- attributes.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cond_destroy (
- pthread_cond_t *Condition
- );
- /*++
- Routine Description:
- This routine destroys a condition variable structure.
- Arguments:
- Condition - Supplies a pointer to the condition variable structure.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cond_broadcast (
- pthread_cond_t *Condition
- );
- /*++
- Routine Description:
- This routine wakes up all threads waiting on the given condition variable.
- This is useful when there are multiple different predicates behind the
- same condition variable.
- Arguments:
- Condition - Supplies a pointer to the condition variable to wake.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cond_signal (
- pthread_cond_t *Condition
- );
- /*++
- Routine Description:
- This routine wakes up at least one thread waiting on the given condition
- variable. This is preferred over the broadcast function if all waiting
- threads are checking the same mutex, as it prevents the thundering herd
- associated with broadcast (all woken threads race to acquire the same
- mutex). Multiple threads may exit a condition wait, so it is critical to
- check the predicate on return.
- Arguments:
- Condition - Supplies a pointer to the condition variable to wake.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cond_wait (
- pthread_cond_t *Condition,
- pthread_mutex_t *Mutex
- );
- /*++
- Routine Description:
- This routine unlocks the given mutex, blocks until the given condition
- variable is signaled, and then reacquires the mutex.
- Arguments:
- Condition - Supplies a pointer to the condition variable to wait on.
- Mutex - Supplies a pointer to the mutex to operate on.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cond_timedwait (
- pthread_cond_t *Condition,
- pthread_mutex_t *Mutex,
- const struct timespec *AbsoluteTimeout
- );
- /*++
- Routine Description:
- This routine unlocks the given mutex, blocks until the given condition
- variable is signaled, and then reacquires the mutex. This wait can time
- out after the specified deadline.
- Arguments:
- Condition - Supplies a pointer to the condition variable to wait on.
- Mutex - Supplies a pointer to the mutex to operate on.
- AbsoluteTimeout - Supplies a pointer to an absolute time after which the
- wait should return anyway.
- Return Value:
- 0 on success.
- ETIMEDOUT if the operation timed out. The predicate may have become true
- naturally anyway, so the caller should always check their predicates.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_condattr_init (
- pthread_condattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a condition variable attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the condition variable attribute
- structure.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_condattr_destroy (
- pthread_condattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine destroys a condition variable attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the condition variable attribute
- structure.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_condattr_getpshared (
- const pthread_condattr_t *Attribute,
- int *Shared
- );
- /*++
- Routine Description:
- This routine determines the shared attribute in a condition variable.
- Arguments:
- Attribute - Supplies a pointer to the condition variable attribute
- structure.
- Shared - Supplies a pointer where the shared attribute will be returned,
- indicating whether the condition variable is visible across processes.
- See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_condattr_setpshared (
- pthread_condattr_t *Attribute,
- int Shared
- );
- /*++
- Routine Description:
- This routine sets the shared attribute in a condition variable.
- Arguments:
- Attribute - Supplies a pointer to the condition variable attribute
- structure.
- Shared - Supplies the value indicating whether this condition variable
- should be visible across processes. See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_condattr_getclock (
- const pthread_condattr_t *Attribute,
- int *Clock
- );
- /*++
- Routine Description:
- This routine determines which clock the condition variable uses for timed
- waits.
- Arguments:
- Attribute - Supplies a pointer to the condition variable attribute
- structure.
- Clock - Supplies a pointer where the clock source for timed waits on the
- condition variable with this attribute will be returned. See CLOCK_*
- definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_condattr_setclock (
- pthread_condattr_t *Attribute,
- int Clock
- );
- /*++
- Routine Description:
- This routine sets the clock used for condition variable timed waits.
- Arguments:
- Attribute - Supplies a pointer to the condition variable attribute
- structure.
- Clock - Supplies the clock to use when performing timed waits.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_init (
- pthread_rwlock_t *Lock,
- pthread_rwlockattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a read/write lock.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Attribute - Supplies an optional pointer to an initialized attribute
- structure governing the internal behavior of the lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_destroy (
- pthread_rwlock_t *Lock
- );
- /*++
- Routine Description:
- This routine destroys a read/write lock.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_rdlock (
- pthread_rwlock_t *Lock
- );
- /*++
- Routine Description:
- This routine acquires the read/write lock for read access. Multiple readers
- can acquire the lock simultaneously, but any writes that try to acquire
- the lock while it's held for read will block. Readers that try to
- acquire the lock while it's held for write will also block.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_timedrdlock (
- pthread_rwlock_t *Lock,
- const struct timespec *AbsoluteTimeout
- );
- /*++
- Routine Description:
- This routine acquires the read/write lock for read access just like the
- read lock function, except that this function will return after the
- specified deadline if the lock could not be acquired.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- AbsoluteTimeout - Supplies a pointer to the absolute deadline after which
- this function should give up and return failure.
- Return Value:
- 0 on success.
- ETIMEDOUT if the operation timed out. This thread will not own the lock.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_tryrdlock (
- pthread_rwlock_t *Lock
- );
- /*++
- Routine Description:
- This routine performs a single attempt at acquiring the lock for read
- access.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_wrlock (
- pthread_rwlock_t *Lock
- );
- /*++
- Routine Description:
- This routine acquires the read/write lock for write access. The lock can
- only be acquired for write access if there are no readers and no other
- writers.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_timedwrlock (
- pthread_rwlock_t *Lock,
- const struct timespec *AbsoluteTimeout
- );
- /*++
- Routine Description:
- This routine acquires the read/write lock for write access just like the
- write lock function, except that this function will return after the
- specified deadline if the lock could not be acquired.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- AbsoluteTimeout - Supplies a pointer to the absolute deadline after which
- this function should give up and return failure.
- Return Value:
- 0 on success.
- ETIMEDOUT if the operation timed out. This thread will not own the lock.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_trywrlock (
- pthread_rwlock_t *Lock
- );
- /*++
- Routine Description:
- This routine performs a single attempt at acquiring the lock for write
- access.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlock_unlock (
- pthread_rwlock_t *Lock
- );
- /*++
- Routine Description:
- This routine unlocks a read/write lock that's been acquired by this thread
- for either read or write.
- Arguments:
- Lock - Supplies a pointer to the read/write lock.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlockattr_init (
- pthread_rwlockattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a read/write lock attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the read/write lock attribute.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlockattr_destroy (
- pthread_rwlockattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine destroys a read/write lock attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the read/write lock attribute.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlockattr_getpshared (
- const pthread_rwlockattr_t *Attribute,
- int *Shared
- );
- /*++
- Routine Description:
- This routine reads the shared attribute from a read/write lock attributes
- structure.
- Arguments:
- Attribute - Supplies a pointer to the read/write lock attribute.
- Shared - Supplies a pointer where the shared attribute of the lock will be
- returned on success. See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_rwlockattr_setpshared (
- pthread_rwlockattr_t *Attribute,
- int Shared
- );
- /*++
- Routine Description:
- This routine sets the shared attribute in a read/write lock attributes
- structure.
- Arguments:
- Attribute - Supplies a pointer to the read/write lock attribute.
- Shared - Supplies the new shared value to set. See PTHREAD_PROCESS_*
- definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- pthread_t
- pthread_self (
- void
- );
- /*++
- Routine Description:
- This routine returns the thread ID for the current thread.
- Arguments:
- None.
- Return Value:
- None.
- --*/
- PTHREAD_API
- int
- pthread_create (
- pthread_t *CreatedThread,
- const pthread_attr_t *Attribute,
- void *(*StartRoutine)(void *),
- void *Argument
- );
- /*++
- Routine Description:
- This routine creates and starts a new thread. The signal mask of the new
- thread is inherited from the current thread. The set of pending signals in
- the new thread will be initially empty.
- Arguments:
- CreatedThread - Supplies a pointer where the identifier of the new thread
- will be returned on success.
- Attribute - Supplies an optional pointer to the attributes of the thread.
- StartRoutine - Supplies a pointer to the routine to call on the new thread.
- Argument - Supplies the argument to pass to the start routine.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_detach (
- pthread_t ThreadId
- );
- /*++
- Routine Description:
- This routine marks the given thread as detached, which means that when it
- exits, its resources are automatically released without needing another
- thread to call join on it. It is illegal to call join on a detached thread,
- as the thread ID may be already released and reused.
- Arguments:
- ThreadId - Supplies the thread ID to detach.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_join (
- pthread_t ThreadId,
- void **ReturnValue
- );
- /*++
- Routine Description:
- This routine waits for the given thread to exit and collects its return
- value. Detached threads cannot be joined.
- Arguments:
- ThreadId - Supplies the identifier of the thread to join with.
- ReturnValue - Supplies a pointer where the thread return value will be
- returned on success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- __NO_RETURN
- void
- pthread_exit (
- void *ReturnValue
- );
- /*++
- Routine Description:
- This routine exits the current thread. If this is a detached thread, then
- all thread resources are destroyed immediately. If this is a joinable
- thread, then some state is kept around until another thread calls join to
- collect the return value.
- Arguments:
- ReturnValue - Supplies an optional return value to give to anyone that
- calls join.
- Return Value:
- None. This routine does not return.
- --*/
- PTHREAD_API
- int
- pthread_equal (
- pthread_t FirstThread,
- pthread_t SecondThread
- );
- /*++
- Routine Description:
- This routine compares two thread identifiers.
- Arguments:
- FirstThread - Supplies the first thread identifier to compare.
- SecondThread - Supplies the second thread identifier to compare.
- Return Value:
- Returns non-zero if the two thread IDs are equal.
- 0 if the thread IDs are not equal.
- --*/
- PTHREAD_API
- int
- pthread_kill (
- pthread_t ThreadId,
- int Signal
- );
- /*++
- Routine Description:
- This routine sends a signal to the given thread.
- Arguments:
- ThreadId - Supplies the identifier of the thread to send the signal to.
- Signal - Supplies the signal number to send. Supply 0 to test if a signal
- can be sent, but not actually send any signal.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_sigqueue (
- pthread_t ThreadId,
- int Signal,
- const union sigval Value
- );
- /*++
- Routine Description:
- This routine queues a signal with data the given thread.
- Arguments:
- ThreadId - Supplies the identifier of the thread to send the signal to.
- Signal - Supplies the signal number to send. Supply 0 to test if a signal
- can be sent, but not actually send any signal.
- Value - Supplies the signal value to send.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_cancel (
- pthread_t ThreadId
- );
- /*++
- Routine Description:
- This routine attempts to cancel (terminate) the thread with the given
- thread ID. This may not terminate the thread immediately if it has disabled
- or deferred cancellation.
- Arguments:
- ThreadId - Supplies the identifier of the thread to cancel.
- Return Value:
- 0 on success.
- ESRCH if a thread with the given ID could not be found.
- --*/
- PTHREAD_API
- int
- pthread_setcancelstate (
- int State,
- int *OldState
- );
- /*++
- Routine Description:
- This routine atomically sets the thread cancellation state for the current
- thread and returns the old state. By default, new threads are created with
- cancellation enabled.
- Arguments:
- State - Supplies the new state to set. Valid values are
- PTHREAD_CANCEL_ENABLE and PTHREAD_CANCEL_DISABLE.
- OldState - Supplies the previously set cancellation state.
- Return Value:
- 0 on success.
- EINVAL if an invalid new state was supplied.
- --*/
- PTHREAD_API
- int
- pthread_setcanceltype (
- int Type,
- int *OldType
- );
- /*++
- Routine Description:
- This routine atomically sets the thread cancellation type for the current
- thread and returns the old type. By default, new threads are created with
- deferred cancellation.
- Arguments:
- Type - Supplies the new type to set. Valid values are
- PTHREAD_CANCEL_DEFERRED and PTHREAD_CANCEL_ASYNCHRONOUS.
- OldType - Supplies the previously set cancellation type.
- Return Value:
- 0 on success.
- EINVAL if an invalid new type was supplied.
- --*/
- PTHREAD_API
- void
- pthread_testcancel (
- void
- );
- /*++
- Routine Description:
- This routine creates a cancellation point in the calling thread. If
- cancellation is currently disabled, this does nothing.
- Arguments:
- None.
- Return Value:
- None.
- --*/
- PTHREAD_API
- int
- pthread_once (
- pthread_once_t *Once,
- void (*Routine)(void)
- );
- /*++
- Routine Description:
- This routine can be called by any thread in the process. The first call
- to this routine will execute the given method. All others calls will do
- nothing. On return from this routine, the routine will have completed
- executing. If the routine is a cancellation point and is canceled, then
- the effect will be as if the routine was never called.
- Arguments:
- Once - Supplies a pointer to the initialized once object. Initialize it
- with the value PTHREAD_ONCE_INIT.
- Routine - Supplies a pointer to the routine to be called exactly once.
- Return Value:
- 0 on success.
- EINVAL if the given once object or routine is invalid.
- --*/
- PTHREAD_API
- pid_t
- pthread_gettid_np (
- pthread_t ThreadId
- );
- /*++
- Routine Description:
- This routine returns the kernel thread ID for the given POSIX thread ID.
- Arguments:
- ThreadId - Supplies the POSIX thread ID.
- Return Value:
- Returns the kernel thread ID.
- --*/
- PTHREAD_API
- pid_t
- pthread_getthreadid_np (
- void
- );
- /*++
- Routine Description:
- This routine returns the kernel thread ID for the current thread.
- Arguments:
- None.
- Return Value:
- Returns the kernel thread ID.
- --*/
- PTHREAD_API
- int
- pthread_getattr_np (
- pthread_t ThreadId,
- pthread_attr_t *Attribute
- );
- /*++
- Routine Description:
- This routine returns the current attributes for a given thread.
- Arguments:
- ThreadId - Supplies the thread to get attributes for.
- Attribute - Supplies a pointer where the attributes will be returned. The
- detach state, stack size, stack base, and guard size may be different
- from when the thread was created to reflect their actual values.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- void
- __pthread_cleanup_push (
- __pthread_cleanup_t *CleanupItem,
- __pthread_cleanup_func_t CleanupRoutine,
- void *Argument
- );
- /*++
- Routine Description:
- This routine pushes a new element onto the cleanup stack for the current
- thread.
- Arguments:
- CleanupItem - Supplies a pointer to the cleanup item context. This routine
- uses this buffer, so it cannot be freed until the cleanup item is
- popped.
- CleanupRoutine - Supplies a pointer to the routine to call if the thread
- exits.
- Argument - Supplies a pointer to pass to the cleanup routine.
- Return Value:
- None.
- --*/
- PTHREAD_API
- void
- __pthread_cleanup_pop (
- __pthread_cleanup_t *CleanupItem,
- int Execute
- );
- /*++
- Routine Description:
- This routine potentially pops an element from the cleanup stack.
- Arguments:
- CleanupItem - Supplies a pointer to the cleanup item to pop.
- Execute - Supplies an integer that is non-zero if the cleanup routine
- should be run, or zero if it should just be popped.
- Return Value:
- None.
- --*/
- PTHREAD_API
- int
- pthread_attr_init (
- pthread_attr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a thread attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the attribute to initialize.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_destroy (
- pthread_attr_t *Attribute
- );
- /*++
- Routine Description:
- This routine destroys a thread attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the attribute to destroy.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getdetachstate (
- const pthread_attr_t *Attribute,
- int *State
- );
- /*++
- Routine Description:
- This routine returns the thread detach state for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- State - Supplies a pointer where the state will be returned on success. See
- PTHREAD_CREATE_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setdetachstate (
- pthread_attr_t *Attribute,
- int State
- );
- /*++
- Routine Description:
- This routine sets the thread detach state for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- State - Supplies the new detach state to set. See PTHREAD_CREATE_*
- definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getschedpolicy (
- const pthread_attr_t *Attribute,
- int *Policy
- );
- /*++
- Routine Description:
- This routine returns the thread scheduling policy for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- Policy - Supplies a pointer where the policy will be returned on success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setschedpolicy (
- const pthread_attr_t *Attribute,
- int Policy
- );
- /*++
- Routine Description:
- This routine sets the thread scheduling policy for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- Policy - Supplies the new policy to set.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getschedparam (
- const pthread_attr_t *Attribute,
- int *Parameter
- );
- /*++
- Routine Description:
- This routine returns the thread scheduling parameter for the given
- attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- Parameter - Supplies a pointer where the scheduling parameter will be
- returned on success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setschedparam (
- pthread_attr_t *Attribute,
- int Parameter
- );
- /*++
- Routine Description:
- This routine sets the thread scheduling parameter for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- Parameter - Supplies the new parameter to set.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getscope (
- const pthread_attr_t *Attribute,
- int *Scope
- );
- /*++
- Routine Description:
- This routine returns the thread scheduling scope for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- Scope - Supplies a pointer where the thread scope will be returned on
- success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setscope (
- pthread_attr_t *Attribute,
- int Scope
- );
- /*++
- Routine Description:
- This routine sets the thread scheduling scope for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- Scope - Supplies the new scope to set.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getstacksize (
- const pthread_attr_t *Attribute,
- size_t *StackSize
- );
- /*++
- Routine Description:
- This routine returns the thread stack size for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- StackSize - Supplies a pointer where the stack size will be returned on
- success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setstacksize (
- pthread_attr_t *Attribute,
- size_t StackSize
- );
- /*++
- Routine Description:
- This routine sets the thread stack size for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- StackSize - Supplies the desired stack size. This should not be less than
- PTHREAD_STACK_MIN and should be a multiple of the page size.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getstack (
- const pthread_attr_t *Attribute,
- void **StackBase,
- size_t *StackSize
- );
- /*++
- Routine Description:
- This routine returns the thread stack information for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- StackBase - Supplies a pointer where the stack base will be returned on
- success.
- StackSize - Supplies a pointer where the stack size will be returned on
- success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setstack (
- pthread_attr_t *Attribute,
- void *StackBase,
- size_t StackSize
- );
- /*++
- Routine Description:
- This routine sets the thread stack information for the given attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- StackBase - Supplies the stack base pointer.
- StackSize - Supplies the desired stack size. This should not be less than
- PTHREAD_STACK_MIN.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_getguardsize (
- const pthread_attr_t *Attribute,
- size_t *GuardSize
- );
- /*++
- Routine Description:
- This routine returns the thread stack guard region size for the given
- attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- GuardSize - Supplies a pointer where the stack guard region size will be
- returned on success.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_attr_setguardsize (
- pthread_attr_t *Attribute,
- size_t GuardSize
- );
- /*++
- Routine Description:
- This routine sets the thread stack guard region size for the given
- attribute.
- Arguments:
- Attribute - Supplies a pointer to the attribute.
- GuardSize - Supplies the desired stack guard region size.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_key_create (
- pthread_key_t *Key,
- void (*KeyDestructorRoutine)(void *)
- );
- /*++
- Routine Description:
- This routine attempts to create and reserve a new thread key.
- Arguments:
- Key - Supplies a pointer where the key information will be returned.
- KeyDestructorRoutine - Supplies an optional pointer to a routine to call
- when the key is destroyed on a particular thread. This routine will
- be called with a pointer to the thread-specific value for the key.
- Return Value:
- 0 on success.
- EAGAIN if the system lacked the resources to create a new key slot, or
- there are too many keys.
- ENOMEM if insufficient memory exists to create the key.
- --*/
- PTHREAD_API
- int
- pthread_key_delete (
- pthread_key_t Key
- );
- /*++
- Routine Description:
- This routine releases a thread key. It is the responsibility of the
- application to release any thread-specific data associated with the old key.
- No destructors are called from this function.
- Arguments:
- Key - Supplies a pointer to the key to delete.
- Return Value:
- 0 on success.
- EINVAL if the key is invalid.
- --*/
- PTHREAD_API
- void *
- pthread_getspecific (
- pthread_key_t Key
- );
- /*++
- Routine Description:
- This routine returns the thread-specific value for the given key.
- Arguments:
- Key - Supplies a pointer to the key whose value should be returned.
- Return Value:
- Returns the last value set for the current thread and key combination, or
- NULL if no value has been set or the key is not valid.
- --*/
- PTHREAD_API
- int
- pthread_setspecific (
- pthread_key_t Key,
- const void *Value
- );
- /*++
- Routine Description:
- This routine sets the thread-specific value for the given key and current
- thread.
- Arguments:
- Key - Supplies the key whose value should be set.
- Value - Supplies the value to set.
- Return Value:
- 0 on success.
- EINVAL if the key passed was invalid.
- --*/
- __HIDDEN
- int
- pthread_atfork (
- void (*PrepareRoutine)(void),
- void (*ParentRoutine)(void),
- void (*ChildRoutine)(void)
- );
- /*++
- Routine Description:
- This routine is called to register an at-fork handler, whose callbacks are
- called immediately before and after any fork operation.
- Arguments:
- PrepareRoutine - Supplies an optional pointer to a routine to be called
- immediately before a fork operation.
- ParentRoutine - Supplies an optional pointer to a routine to be called
- after a fork in the parent process.
- ChildRoutine - Supplies an optional pointer to a routine to be called
- after a fork in the child process.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- __register_atfork (
- void (*PrepareRoutine)(void),
- void (*ParentRoutine)(void),
- void (*ChildRoutine)(void),
- void *DynamicObjectHandle
- );
- /*++
- Routine Description:
- This routine is called to register an at-fork handler, remembering the
- dynamic object it was registered from.
- Arguments:
- PrepareRoutine - Supplies an optional pointer to a routine to be called
- immediately before a fork operation.
- ParentRoutine - Supplies an optional pointer to a routine to be called
- after a fork in the parent process.
- ChildRoutine - Supplies an optional pointer to ao routine to be called
- after a fork in the child process.
- DynamicObjectHandle - Supplies an identifier unique to the dynamic object
- registering the handlers. This can be used to unregister the handles if
- the dynamic object is unloaded.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrier_init (
- pthread_barrier_t *Barrier,
- const pthread_barrierattr_t *Attribute,
- unsigned Count
- );
- /*++
- Routine Description:
- This routine initializes the given POSIX thread barrier with the given
- attributes and thread count.
- Arguments:
- Barrier - Supplies a pointer to the POSIX thread barrier to be initialized.
- Attribute - Supplies an optional pointer to the attribute to use for
- initializing the barrier.
- Count - Supplies the number of threads that must wait on the barrier for it
- to be satisfied.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrier_destroy (
- pthread_barrier_t *Barrier
- );
- /*++
- Routine Description:
- This routine destroys the given POSIX thread barrier.
- Arguments:
- Barrier - Supplies a pointer to the POSIX thread barrier to destroy.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrier_wait (
- pthread_barrier_t *Barrier
- );
- /*++
- Routine Description:
- This routine blocks untils the required number of threads have waited on
- the barrier. Upon success, an arbitrary thread will receive
- PTHREAD_BARRIER_SERIAL_THREAD as a return value; the rest will receive 0.
- This routine does not get interrupted by signals and will continue to block
- after a signal is handled.
- Arguments:
- Barrier - Supplies a pointer to the POSIX thread barrier.
- Return Value:
- 0 or PTHREAD_BARRIER_SERIAL_THREAD on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrierattr_init (
- pthread_barrierattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine initializes a barrier attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the barrier attribute structure to
- initialize.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrierattr_destroy (
- pthread_barrierattr_t *Attribute
- );
- /*++
- Routine Description:
- This routine destroys the given barrier attribute structure.
- Arguments:
- Attribute - Supplies a pointer to the barrier attribute to destroy.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrierattr_getpshared (
- const pthread_barrierattr_t *Attribute,
- int *Shared
- );
- /*++
- Routine Description:
- This routine determines the shared state in a barrier attribute.
- Arguments:
- Attribute - Supplies a pointer to the barrier attribute structure.
- Shared - Supplies a pointer where the shared attribute will be returned,
- indicating whether the condition variable is visible across processes.
- See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- PTHREAD_API
- int
- pthread_barrierattr_setpshared (
- const pthread_barrierattr_t *Attribute,
- int Shared
- );
- /*++
- Routine Description:
- This routine sets the shared state in a barrier attribute.
- Arguments:
- Attribute - Supplies a pointer to the barrier attribute structure.
- Shared - Supplies the value indicating whether this barrier should be
- visible across processes. See PTHREAD_PROCESS_* definitions.
- Return Value:
- 0 on success.
- Returns an error number on failure.
- --*/
- #ifdef __cplusplus
- }
- #endif
- #endif
|