5 #include "xbt/xbt_os_thread.h"
\r
8 XBT_LOG_NEW_DEFAULT_CATEGORY(sem_basic,"Messages specific for this sem example");
\r
12 #define THREAD_THREADS_MAX ((unsigned int)10)
\r
15 * the thread funtion.
\r
18 thread_routine(void* param);
\r
20 /* an entry of the table of threads */
\r
21 typedef struct s_thread_entry
\r
23 xbt_os_thread_t thread;
\r
24 unsigned int thread_index; /* the index of the thread */
\r
25 }s_thread_entry_t,* thread_entry_t;
\r
28 static xbt_os_sem_t
\r
34 main(int argc, char* argv[])
\r
36 s_thread_entry_t threads_table[THREAD_THREADS_MAX] = {0};
\r
40 xbt_init(&argc,argv);
\r
42 sem = xbt_os_sem_init(1);
\r
46 while(i < THREAD_THREADS_MAX)
\r
48 threads_table[i].thread_index = i;
\r
50 if(NULL == (threads_table[i].thread = xbt_os_thread_create("thread",thread_routine,&(threads_table[i].thread_index))))
\r
56 /* close the thread handles */
\r
57 for(j = 0; j < THREAD_THREADS_MAX; j++)
\r
58 xbt_os_thread_join(threads_table[j].thread,NULL);
\r
60 xbt_os_sem_destroy(sem);
\r
62 INFO1("sem_basic terminated with exit code %d (success)",EXIT_SUCCESS);
\r
66 return EXIT_SUCCESS;
\r
71 thread_routine(void* param)
\r
73 int thread_index = *((int*)param);
\r
76 xbt_os_sem_acquire(sem);
\r
77 INFO1("Hello i'm the thread %d",thread_index);
\r
79 INFO1("The new value of the global variable is %d, bye",value);
\r
80 xbt_os_sem_release(sem);
\r
82 xbt_os_thread_exit(&exit_code);
\r
84 return (void*)(NULL);
\r