Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 1.6 KB

testsem.c

File metadata and controls

76 lines (61 loc) · 1.6 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* Simple test of the SDL semaphore code */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include "SDL.h"
#include "SDL_thread.h"
#define NUM_THREADS 10
static SDL_sem *sem;
int alive = 1;
int ThreadFunc(void *data)
{
while ( alive ) {
SDL_SemWait(sem);
fprintf(stderr, "Thread number %d has got the semaphore (value = %d)!\n", (int)data, SDL_SemValue(sem));
SDL_Delay(200);
SDL_SemPost(sem);
fprintf(stderr, "Thread number %d has released the semaphore (value = %d)!\n", (int)data, SDL_SemValue(sem));
SDL_Delay(1); /* For the scheduler */
}
printf("Thread number %d exiting.\n", (int)data);
return 0;
}
static void killed(int sig)
{
alive = 0;
}
int main(int argc, char **argv)
{
SDL_Thread *threads[NUM_THREADS];
int i, init_sem;
if(argc < 2) {
fprintf(stderr,"Usage: %s init_value\n", argv[0]);
Sep 28, 2005
Sep 28, 2005
42
return(1);
Apr 26, 2001
Apr 26, 2001
43
44
45
46
47
}
/* Load the SDL library */
if ( SDL_Init(0) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
Sep 28, 2005
Sep 28, 2005
48
return(1);
Apr 26, 2001
Apr 26, 2001
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
}
signal(SIGTERM, killed);
signal(SIGINT, killed);
init_sem = atoi(argv[1]);
sem = SDL_CreateSemaphore(init_sem);
printf("Running %d threads, semaphore value = %d\n", NUM_THREADS, init_sem);
/* Create all the threads */
for( i = 0; i < NUM_THREADS; ++i ) {
threads[i] = SDL_CreateThread(ThreadFunc, (void*)i);
}
/* Wait 10 seconds */
SDL_Delay(10 * 1000);
/* Wait for all threads to finish */
printf("Waiting for threads to finish\n");
alive = 0;
for( i = 0; i < NUM_THREADS; ++i ) {
SDL_WaitThread(threads[i], NULL);
}
printf("Finished waiting for threads\n");
SDL_DestroySemaphore(sem);
Sep 28, 2005
Sep 28, 2005
74
SDL_Quit();
Apr 26, 2001
Apr 26, 2001
75
76
return(0);
}