Wiki Page Content

Differences between revisions 2 and 9 (spanning 7 versions)
Revision 2 as of 2010-06-02 00:46:10
Size: 1057
Editor: SheenaSmith
Comment: add content
Revision 9 as of 2013-08-12 05:40:21
Size: 1634
Editor: Sam Lantinga
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
#pragma disable-camelcase
||<tablewidth="100%" style="color: #FF0000;" :> DRAFT||
#pragma camelcase off
Line 6: Line 5:
Use this function to create a semaphore, initialized with value, returns NULL on failure.

<<Color2(green,Should this description stop at semaphore and the remaining info be moved below?)>>
Use this function to create a semaphore.
Line 18: Line 15:
||'''initial_value'''||^the starting value for the semaphore^|| ||'''initial_value'''||the starting value of the semaphore||
Line 21: Line 18:
Returns ^the current semaphore value for the resource^ on success, or NULL on failure; call [[SDL_GetError]]() for more information.

<<Color2(green,-OR- does it return a positive value when the resource is available and 0 when it is in use?)>>
Returns a new semaphore or NULL on failure; call [[SDL_GetError]]() for more information.
Line 26: Line 21:
## Begin Semaphore Example
Typical use of semaphores:
Line 27: Line 24:
You can add your code example here SDL_atomic_t done;
SDL_sem *sem;

SDL_AtomicSet(&done, 0);
sem = SDL_CreateSemaphore(0);
.
.
Thread A:
    while (!SDL_AtomicGet(&done)) {
        add_data_to_queue();
        SDL_SemPost(sem);
    }

Thread B:
    while (!SDL_AtomicGet(&done)) {
        SDL_SemWait(sem);
        if (data_available()) {
            get_data_from_queue();
        }
    }
.
.
SDL_AtomicSet(&done, 1);
SDL_SemPost(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);
Line 29: Line 51:
## End Semaphore Example
Line 31: Line 54:
''You can add useful comments here'' This function creates a new semaphore and initializes it with the value '''initial_value'''. Each wait operation on the semaphore will atomically decrement the semaphore value and potentially block if the semaphore value is 0. Each post operation will atomically increment the semaphore value and wake waiting threads and allow them to retry the wait operation.
Line 34: Line 57:
 .[[SDL_DestroySemaphore]] ???  .[[SDL_DestroySemaphore]]
 .[[SDL_SemPost]]
 .[[SDL_SemTryWait]]
 .[[SDL_SemValue]]
 .[[SDL_SemWait]]
 .[[SDL_SemWaitTimeout]]

SDL_CreateSemaphore

Use this function to create a semaphore.

Syntax

SDL_sem* SDL_CreateSemaphore(Uint32 initial_value)

Function Parameters

initial_value

the starting value of the semaphore

Return Value

Returns a new semaphore or NULL on failure; call SDL_GetError() for more information.

Code Examples

Typical use of semaphores:

SDL_atomic_t done;
SDL_sem *sem;

SDL_AtomicSet(&done, 0);
sem = SDL_CreateSemaphore(0);
.
.
Thread A:
    while (!SDL_AtomicGet(&done)) {
        add_data_to_queue();
        SDL_SemPost(sem);
    }

Thread B:
    while (!SDL_AtomicGet(&done)) {
        SDL_SemWait(sem);
        if (data_available()) {
            get_data_from_queue();
        }
    }
.
.
SDL_AtomicSet(&done, 1);
SDL_SemPost(sem);
wait_for_threads();
SDL_DestroySemaphore(sem);

Remarks

This function creates a new semaphore and initializes it with the value initial_value. Each wait operation on the semaphore will atomically decrement the semaphore value and potentially block if the semaphore value is 0. Each post operation will atomically increment the semaphore value and wake waiting threads and allow them to retry the wait operation.


CategoryAPI, CategoryMutex

None: SDL_CreateSemaphore (last edited 2013-08-12 05:40:21 by Sam Lantinga)

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit