Rev 1129 | Rev 1175 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1129 | Rev 1152 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | #include <futex.h> |
37 | #include <futex.h> |
38 | 38 | ||
39 | int a; |
39 | int a; |
40 | atomic_t ftx; |
40 | atomic_t ftx; |
41 | 41 | ||
42 | int __thread tls_prom; |
42 | int __thread stage; |
43 | 43 | ||
44 | extern void utest(void *arg); |
44 | extern void utest(void *arg); |
45 | void utest(void *arg) |
45 | void utest(void *arg) |
46 | { |
46 | { |
47 | printf("Uspace thread started.\n"); |
47 | printf("Uspace thread started.\n"); |
Line 255... | Line 255... | ||
255 | ipc_wait_for_call(&data, 0); |
255 | ipc_wait_for_call(&data, 0); |
256 | } |
256 | } |
257 | 257 | ||
258 | static int ptest(void *arg) |
258 | static int ptest(void *arg) |
259 | { |
259 | { |
260 | tls_prom = -1; |
260 | stage = 1; |
261 | printf("Pseudo thread stage%d.\n", -tls_prom); |
261 | printf("Pseudo thread stage%d.\n", stage); |
262 | tls_prom = -2; |
262 | stage++; |
263 | psthread_schedule_next(); |
263 | psthread_schedule_next(); |
264 | printf("Pseudo thread stage%d.\n", -tls_prom); |
264 | printf("Pseudo thread stage%d.\n", stage); |
265 | tls_prom = -3; |
265 | stage++; |
266 | psthread_schedule_next(); |
266 | psthread_schedule_next(); |
267 | printf("Pseudo thread stage%d\n", -tls_prom); |
267 | printf("Pseudo thread stage%d.\n", stage); |
268 | psthread_schedule_next(); |
268 | psthread_schedule_next(); |
- | 269 | stage++; |
|
269 | printf("Pseudo thread stage4.\n"); |
270 | printf("Pseudo thread stage%d.\n", stage); |
270 | psthread_schedule_next(); |
271 | psthread_schedule_next(); |
271 | printf("Pseudo thread exiting.\n"); |
272 | printf("Pseudo thread exiting.\n"); |
272 | return 0; |
273 | return 0; |
273 | } |
274 | } |
274 | 275 | ||
Line 293... | Line 294... | ||
293 | if (futex_up(&ftx) < 0) |
294 | if (futex_up(&ftx) < 0) |
294 | printf("Futex failed.\n"); |
295 | printf("Futex failed.\n"); |
295 | 296 | ||
296 | if (futex_down(&ftx) < 0) |
297 | if (futex_down(&ftx) < 0) |
297 | printf("Futex failed.\n"); |
298 | printf("Futex failed.\n"); |
298 | /* |
299 | |
299 | if ((tid = thread_create(utest, NULL, "utest")) != -1) { |
300 | if ((tid = thread_create(utest, NULL, "utest")) != -1) { |
300 | printf("Created thread tid=%d\n", tid); |
301 | printf("Created thread tid=%d\n", tid); |
301 | } |
302 | } |
302 | 303 | ||
303 | if ((tid = thread_create(utest, NULL, "utest")) != -1) { |
304 | if ((tid = thread_create(utest, NULL, "utest")) != -1) { |
304 | printf("Created thread tid=%d\n", tid); |
305 | printf("Created thread tid=%d\n", tid); |
305 | } |
306 | } |
306 | */ |
307 | |
307 | int i; |
308 | int i; |
308 | 309 | ||
309 | for (i = 0; i < 50000000; i++) |
310 | for (i = 0; i < 50000000; i++) |
310 | ; |
311 | ; |
311 | 312 | ||
312 | if (futex_up(&ftx) < 0) |
313 | if (futex_up(&ftx) < 0) |
313 | printf("Futex failed.\n"); |
314 | printf("Futex failed.\n"); |
314 | 315 | ||
315 | 316 | ||
316 | printf("Creating pathread\n"); |
317 | printf("Creating pseudo thread.\n"); |
317 | tls_prom = 1; |
318 | stage = 1; |
318 | ptid = psthread_create(ptest, NULL); |
319 | ptid = psthread_create(ptest, NULL); |
319 | printf("Main thread stage%d\n",tls_prom); |
320 | printf("Main thread stage%d.\n", stage); |
320 | tls_prom = 2; |
321 | stage++; |
321 | psthread_schedule_next();; |
322 | psthread_schedule_next();; |
322 | printf("Main thread stage%d\n", tls_prom); |
323 | printf("Main thread stage%d.\n", stage); |
323 | tls_prom = 3; |
324 | stage++; |
324 | psthread_schedule_next();; |
325 | psthread_schedule_next();; |
325 | printf("Main thread stage%d\n", tls_prom); |
326 | printf("Main thread stage%d.\n", stage); |
326 | 327 | ||
327 | psthread_join(ptid); |
328 | psthread_join(ptid); |
328 | 329 | ||
329 | printf("Main thread exiting.\n"); |
330 | printf("Main thread exiting.\n"); |
330 | return 0; |
331 | return 0; |