Mercurial > sdl-ios-xcode
comparison test/testsem.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | 290b5baf2fca |
children | d547877e355e |
comparison
equal
deleted
inserted
replaced
1894:c69cee13dd76 | 1895:c121d94672cb |
---|---|
11 #define NUM_THREADS 10 | 11 #define NUM_THREADS 10 |
12 | 12 |
13 static SDL_sem *sem; | 13 static SDL_sem *sem; |
14 int alive = 1; | 14 int alive = 1; |
15 | 15 |
16 int SDLCALL ThreadFunc(void *data) | 16 int SDLCALL |
17 ThreadFunc(void *data) | |
17 { | 18 { |
18 int threadnum = (int)(uintptr_t)data; | 19 int threadnum = (int) (uintptr_t) data; |
19 while ( alive ) { | 20 while (alive) { |
20 SDL_SemWait(sem); | 21 SDL_SemWait(sem); |
21 fprintf(stderr, "Thread number %d has got the semaphore (value = %d)!\n", threadnum, SDL_SemValue(sem)); | 22 fprintf(stderr, |
22 SDL_Delay(200); | 23 "Thread number %d has got the semaphore (value = %d)!\n", |
23 SDL_SemPost(sem); | 24 threadnum, SDL_SemValue(sem)); |
24 fprintf(stderr, "Thread number %d has released the semaphore (value = %d)!\n", threadnum, SDL_SemValue(sem)); | 25 SDL_Delay(200); |
25 SDL_Delay(1); /* For the scheduler */ | 26 SDL_SemPost(sem); |
26 } | 27 fprintf(stderr, |
27 printf("Thread number %d exiting.\n", threadnum); | 28 "Thread number %d has released the semaphore (value = %d)!\n", |
28 return 0; | 29 threadnum, SDL_SemValue(sem)); |
30 SDL_Delay(1); /* For the scheduler */ | |
31 } | |
32 printf("Thread number %d exiting.\n", threadnum); | |
33 return 0; | |
29 } | 34 } |
30 | 35 |
31 static void killed(int sig) | 36 static void |
37 killed(int sig) | |
32 { | 38 { |
33 alive = 0; | 39 alive = 0; |
34 } | 40 } |
35 | 41 |
36 int main(int argc, char **argv) | 42 int |
43 main(int argc, char **argv) | |
37 { | 44 { |
38 SDL_Thread *threads[NUM_THREADS]; | 45 SDL_Thread *threads[NUM_THREADS]; |
39 uintptr_t i; | 46 uintptr_t i; |
40 int init_sem; | 47 int init_sem; |
41 | 48 |
42 if(argc < 2) { | 49 if (argc < 2) { |
43 fprintf(stderr,"Usage: %s init_value\n", argv[0]); | 50 fprintf(stderr, "Usage: %s init_value\n", argv[0]); |
44 return(1); | 51 return (1); |
45 } | 52 } |
46 | 53 |
47 /* Load the SDL library */ | 54 /* Load the SDL library */ |
48 if ( SDL_Init(0) < 0 ) { | 55 if (SDL_Init(0) < 0) { |
49 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); | 56 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); |
50 return(1); | 57 return (1); |
51 } | 58 } |
52 signal(SIGTERM, killed); | 59 signal(SIGTERM, killed); |
53 signal(SIGINT, killed); | 60 signal(SIGINT, killed); |
54 | |
55 init_sem = atoi(argv[1]); | |
56 sem = SDL_CreateSemaphore(init_sem); | |
57 | |
58 printf("Running %d threads, semaphore value = %d\n", NUM_THREADS, init_sem); | |
59 /* Create all the threads */ | |
60 for( i = 0; i < NUM_THREADS; ++i ) { | |
61 threads[i] = SDL_CreateThread(ThreadFunc, (void*)i); | |
62 } | |
63 | 61 |
64 /* Wait 10 seconds */ | 62 init_sem = atoi(argv[1]); |
65 SDL_Delay(10 * 1000); | 63 sem = SDL_CreateSemaphore(init_sem); |
66 | 64 |
67 /* Wait for all threads to finish */ | 65 printf("Running %d threads, semaphore value = %d\n", NUM_THREADS, |
68 printf("Waiting for threads to finish\n"); | 66 init_sem); |
69 alive = 0; | 67 /* Create all the threads */ |
70 for( i = 0; i < NUM_THREADS; ++i ) { | 68 for (i = 0; i < NUM_THREADS; ++i) { |
71 SDL_WaitThread(threads[i], NULL); | 69 threads[i] = SDL_CreateThread(ThreadFunc, (void *) i); |
72 } | 70 } |
73 printf("Finished waiting for threads\n"); | |
74 | 71 |
75 SDL_DestroySemaphore(sem); | 72 /* Wait 10 seconds */ |
76 SDL_Quit(); | 73 SDL_Delay(10 * 1000); |
77 return(0); | 74 |
75 /* Wait for all threads to finish */ | |
76 printf("Waiting for threads to finish\n"); | |
77 alive = 0; | |
78 for (i = 0; i < NUM_THREADS; ++i) { | |
79 SDL_WaitThread(threads[i], NULL); | |
80 } | |
81 printf("Finished waiting for threads\n"); | |
82 | |
83 SDL_DestroySemaphore(sem); | |
84 SDL_Quit(); | |
85 return (0); | |
78 } | 86 } |