]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/macosx/queues/main.c
Vendor import of lldb trunk r256945:
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / macosx / queues / main.c
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <dispatch/dispatch.h>
4 #include <pthread.h>
5
6 void
7 doing_the_work_1(void *in)
8 {
9     while (1)
10         sleep (1);
11 }
12
13 void
14 submit_work_1a(void *in)
15 {
16     dispatch_queue_t *work_performer_1 = (dispatch_queue_t*) in;
17     dispatch_async_f (*work_performer_1, NULL, doing_the_work_1);
18     dispatch_async_f (*work_performer_1, NULL, doing_the_work_1);
19 }
20
21 void
22 submit_work_1b(void *in)
23 {
24     dispatch_queue_t *work_performer_1 = (dispatch_queue_t*) in;
25     dispatch_async_f (*work_performer_1, NULL, doing_the_work_1);
26     dispatch_async_f (*work_performer_1, NULL, doing_the_work_1);
27     while (1)
28       sleep (1);
29 }
30
31 void
32 doing_the_work_2(void *in)
33 {
34     while (1)
35         sleep (1);
36 }
37
38 void
39 submit_work_2(void *in)
40 {
41     dispatch_queue_t *work_performer_2 = (dispatch_queue_t*) in;
42     int i = 0;
43     while (i++ <  5000)
44     {
45         dispatch_async_f (*work_performer_2, NULL, doing_the_work_2);
46         dispatch_async_f (*work_performer_2, NULL, doing_the_work_2);
47     }
48 }
49
50
51 void
52 doing_the_work_3(void *in)
53 {
54     while (1)
55         sleep(1);
56 }
57
58 void
59 submit_work_3(void *in)
60 {
61     dispatch_queue_t *work_performer_3 = (dispatch_queue_t*) in;
62     dispatch_async_f (*work_performer_3, NULL, doing_the_work_3);
63     dispatch_async_f (*work_performer_3, NULL, doing_the_work_3);
64     dispatch_async_f (*work_performer_3, NULL, doing_the_work_3);
65     dispatch_async_f (*work_performer_3, NULL, doing_the_work_3);
66 }
67
68
69 void
70 stopper ()
71 {
72     while (1)
73         sleep (1);
74 }
75
76 int main ()
77 {
78     dispatch_queue_t work_submittor_1 = dispatch_queue_create ("com.apple.work_submittor_1", DISPATCH_QUEUE_SERIAL);
79     dispatch_queue_t work_submittor_2 = dispatch_queue_create ("com.apple.work_submittor_and_quit_2", DISPATCH_QUEUE_SERIAL);
80     dispatch_queue_t work_submittor_3 = dispatch_queue_create ("com.apple.work_submittor_3", DISPATCH_QUEUE_SERIAL);
81
82     dispatch_queue_t work_performer_1 = dispatch_queue_create ("com.apple.work_performer_1", DISPATCH_QUEUE_SERIAL);
83     dispatch_queue_t work_performer_2 = dispatch_queue_create ("com.apple.work_performer_2", DISPATCH_QUEUE_SERIAL);
84
85     dispatch_queue_t work_performer_3 = dispatch_queue_create ("com.apple.work_performer_3", DISPATCH_QUEUE_CONCURRENT);
86
87     dispatch_async_f (work_submittor_1, (void*) &work_performer_1, submit_work_1a);
88     dispatch_async_f (work_submittor_1, (void*) &work_performer_1, submit_work_1b);
89
90     dispatch_async_f (work_submittor_2, (void*) &work_performer_2, submit_work_2);
91
92     dispatch_async_f (work_submittor_3, (void*) &work_performer_3, submit_work_3);
93
94
95     // Spin up threads with each of the different libdispatch QoS values.
96
97     dispatch_async (dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
98             pthread_setname_np ("user initiated QoS");
99             while (1)
100                 sleep (10);
101                 });
102     dispatch_async (dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
103             pthread_setname_np ("user interactive QoS");
104             while (1)
105                 sleep (10);
106                 });
107     dispatch_async (dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
108             pthread_setname_np ("default QoS");
109             while (1)
110                 sleep (10);
111                 });
112     dispatch_async (dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
113             pthread_setname_np ("utility QoS");
114             while (1)
115                 sleep (10);
116                 });
117     dispatch_async (dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{
118             pthread_setname_np ("background QoS");
119             while (1)
120                 sleep (10);
121                 });
122     dispatch_async (dispatch_get_global_queue(QOS_CLASS_UNSPECIFIED, 0), ^{
123             pthread_setname_np ("unspecified QoS");
124             while (1)
125                 sleep (10);
126                 });
127
128
129     sleep (1);
130     stopper ();
131
132 }
133