Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
96 lines (76 loc) · 2.03 KB

torturethread.c

File metadata and controls

96 lines (76 loc) · 2.03 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Simple test of the SDL threading code */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include "SDL.h"
#include "SDL_thread.h"
#define NUMTHREADS 10
static char volatile time_for_threads_to_die[NUMTHREADS];
Sep 28, 2005
Sep 28, 2005
16
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
Jul 10, 2006
Jul 10, 2006
17
18
static void
quit(int rc)
Sep 28, 2005
Sep 28, 2005
19
{
Jul 10, 2006
Jul 10, 2006
20
21
SDL_Quit();
exit(rc);
Sep 28, 2005
Sep 28, 2005
22
23
}
Jul 10, 2006
Jul 10, 2006
24
25
26
27
28
29
30
int SDLCALL
SubThreadFunc(void *data)
{
while (!*(int volatile *) data) {
; /*SDL_Delay(10); *//* do nothing */
}
return 0;
Apr 26, 2001
Apr 26, 2001
31
32
}
Jul 10, 2006
Jul 10, 2006
33
34
35
36
37
38
39
int SDLCALL
ThreadFunc(void *data)
{
SDL_Thread *sub_threads[NUMTHREADS];
int flags[NUMTHREADS];
int i;
int tid = (int) (uintptr_t) data;
Apr 26, 2001
Apr 26, 2001
40
Jul 10, 2006
Jul 10, 2006
41
fprintf(stderr, "Creating Thread %d\n", tid);
Apr 26, 2001
Apr 26, 2001
42
Jul 10, 2006
Jul 10, 2006
43
44
45
46
for (i = 0; i < NUMTHREADS; i++) {
flags[i] = 0;
sub_threads[i] = SDL_CreateThread(SubThreadFunc, &flags[i]);
}
Apr 26, 2001
Apr 26, 2001
47
Jul 10, 2006
Jul 10, 2006
48
49
50
51
printf("Thread '%d' waiting for signal\n", tid);
while (time_for_threads_to_die[tid] != 1) {
; /* do nothing */
}
Apr 26, 2001
Apr 26, 2001
52
Jul 10, 2006
Jul 10, 2006
53
54
55
56
57
printf("Thread '%d' sending signals to subthreads\n", tid);
for (i = 0; i < NUMTHREADS; i++) {
flags[i] = 1;
SDL_WaitThread(sub_threads[i], NULL);
}
Apr 26, 2001
Apr 26, 2001
58
Jul 10, 2006
Jul 10, 2006
59
printf("Thread '%d' exiting!\n", tid);
Apr 26, 2001
Apr 26, 2001
60
Jul 10, 2006
Jul 10, 2006
61
return 0;
Apr 26, 2001
Apr 26, 2001
62
63
}
Jul 10, 2006
Jul 10, 2006
64
65
int
main(int argc, char *argv[])
Apr 26, 2001
Apr 26, 2001
66
{
Jul 10, 2006
Jul 10, 2006
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
SDL_Thread *threads[NUMTHREADS];
int i;
/* Load the SDL library */
if (SDL_Init(0) < 0) {
fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
signal(SIGSEGV, SIG_DFL);
for (i = 0; i < NUMTHREADS; i++) {
time_for_threads_to_die[i] = 0;
threads[i] = SDL_CreateThread(ThreadFunc, (void *) (uintptr_t) i);
if (threads[i] == NULL) {
fprintf(stderr, "Couldn't create thread: %s\n", SDL_GetError());
quit(1);
}
}
for (i = 0; i < NUMTHREADS; i++) {
time_for_threads_to_die[i] = 1;
}
for (i = 0; i < NUMTHREADS; i++) {
SDL_WaitThread(threads[i], NULL);
}
SDL_Quit();
return (0);
Apr 26, 2001
Apr 26, 2001
96
}