|
Size: 943
Comment: create page, add content (Wed Mar 10 ver; changeset 4428)
|
← Revision 9 as of 2013-08-12 05:40:21 ⇥
Size: 1634
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. | Returns a new semaphore or NULL on failure; call [[SDL_GetError]]() for more information. |
| Line 24: | Line 21: |
| ## Begin Semaphore Example Typical use of semaphores: |
|
| Line 25: | 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 27: | Line 51: |
| ## End Semaphore Example | |
| Line 29: | 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 32: | 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.
Contents
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.
