root / tests / tcg / testthread.c @ e4b42e6e
History | View | Annotate | Download (1.2 kB)
1 | f71d6121 | Catalin Patulea | #include <assert.h> |
---|---|---|---|
2 | 1b6b029e | bellard | #include <stdlib.h> |
3 | 1b6b029e | bellard | #include <stdio.h> |
4 | 7fb9a24e | bellard | #include <string.h> |
5 | 1b6b029e | bellard | #include <signal.h> |
6 | 1b6b029e | bellard | #include <unistd.h> |
7 | 1b6b029e | bellard | #include <inttypes.h> |
8 | 1b6b029e | bellard | #include <pthread.h> |
9 | 1b6b029e | bellard | #include <sys/wait.h> |
10 | 1b6b029e | bellard | #include <sched.h> |
11 | 1b6b029e | bellard | |
12 | f71d6121 | Catalin Patulea | void checked_write(int fd, const void *buf, size_t count) |
13 | f71d6121 | Catalin Patulea | { |
14 | f71d6121 | Catalin Patulea | ssize_t rc = write(fd, buf, count); |
15 | f71d6121 | Catalin Patulea | assert(rc == count); |
16 | f71d6121 | Catalin Patulea | } |
17 | f71d6121 | Catalin Patulea | |
18 | 1b6b029e | bellard | void *thread1_func(void *arg) |
19 | 1b6b029e | bellard | { |
20 | 1b6b029e | bellard | int i;
|
21 | 1b6b029e | bellard | char buf[512]; |
22 | 1b6b029e | bellard | |
23 | 1b6b029e | bellard | for(i=0;i<10;i++) { |
24 | 1b6b029e | bellard | snprintf(buf, sizeof(buf), "thread1: %d %s\n", i, (char *)arg); |
25 | f71d6121 | Catalin Patulea | checked_write(1, buf, strlen(buf));
|
26 | 1b6b029e | bellard | usleep(100 * 1000); |
27 | 1b6b029e | bellard | } |
28 | 1b6b029e | bellard | return NULL; |
29 | 1b6b029e | bellard | } |
30 | 1b6b029e | bellard | |
31 | 1b6b029e | bellard | void *thread2_func(void *arg) |
32 | 1b6b029e | bellard | { |
33 | 1b6b029e | bellard | int i;
|
34 | 1b6b029e | bellard | char buf[512]; |
35 | 1b6b029e | bellard | for(i=0;i<20;i++) { |
36 | 1b6b029e | bellard | snprintf(buf, sizeof(buf), "thread2: %d %s\n", i, (char *)arg); |
37 | f71d6121 | Catalin Patulea | checked_write(1, buf, strlen(buf));
|
38 | 1b6b029e | bellard | usleep(150 * 1000); |
39 | 1b6b029e | bellard | } |
40 | 1b6b029e | bellard | return NULL; |
41 | 1b6b029e | bellard | } |
42 | 1b6b029e | bellard | |
43 | 1b6b029e | bellard | void test_pthread(void) |
44 | 1b6b029e | bellard | { |
45 | 1b6b029e | bellard | pthread_t tid1, tid2; |
46 | 1b6b029e | bellard | |
47 | 1b6b029e | bellard | pthread_create(&tid1, NULL, thread1_func, "hello1"); |
48 | 1b6b029e | bellard | pthread_create(&tid2, NULL, thread2_func, "hello2"); |
49 | 1b6b029e | bellard | pthread_join(tid1, NULL);
|
50 | 1b6b029e | bellard | pthread_join(tid2, NULL);
|
51 | 1b6b029e | bellard | printf("End of pthread test.\n");
|
52 | 1b6b029e | bellard | } |
53 | 1b6b029e | bellard | |
54 | 1b6b029e | bellard | int main(int argc, char **argv) |
55 | 1b6b029e | bellard | { |
56 | 1b6b029e | bellard | test_pthread(); |
57 | 1b6b029e | bellard | return 0; |
58 | 1b6b029e | bellard | } |