source: tests/concurrent/clib_tls.c@ fd4c009

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since fd4c009 was a5e7233, checked in by Thierry Delisle <tdelisle@…>, 5 years ago

C interface now runs worker init routine in dedicated thread.
Also added test for this case.

  • Property mode set to 100644
File size: 1.0 KB
RevLine 
[a5e7233]1#include <stdio.h>
2#include <stdlib.h>
3#include <clib/cfathread.h>
4#include <bits/defs.hfa>
5
6extern "C" {
7void _exit(int status);
8}
9
10thread_local int checkval = 0xBAADF00D;
11
12void init(void * ) {
13 printf("Local Init\n");
14 checkval = 0xFEEDFACE;
15}
16
17void * checker( void * ) {
18 for(int i = 0; i < 50; i++) {
19 if(checkval != 0xFeedFace) {
20 printf("Bad Food!\n");
21 }
22 cfathread_yield();
23 }
24 printf("Done\n");
25 return NULL;
26}
27
28int main() {
29 init(NULL);
30 cfathread_cluster_t cl = cfathread_cluster_self();
31
32 cfathread_cluster_add_worker( cl, NULL, init, NULL );
33 cfathread_cluster_add_worker( cl, NULL, init, NULL );
34 cfathread_cluster_add_worker( cl, NULL, init, NULL );
35
36 cfathread_attr_t attr;
37 cfathread_attr_init(&attr);
38 cfathread_attr_setcluster(&attr, cl);
39 {
40 printf("Starting Checkers\n");
41 cfathread_t t[7];
42 for(int i = 0; i < 7; i++) {
43 cfathread_create( &t[i], &attr, checker, NULL );
44 }
45 for(int i = 0; i < 7; i++) {
46 cfathread_join( t[i], NULL );
47 }
48 }
49 cfathread_attr_destroy(&attr);
50 fflush(stdout);
51 _exit(0);
52}
Note: See TracBrowser for help on using the repository browser.