2 #include "libtest_threadset_internal.h"
8 /****************************************************************************/
9 void libtest_threadset_run( struct libtest_threadset_state *ts )
11 struct lfds710_list_asu_element
14 struct libtest_threadset_per_thread_state
17 LFDS710_PAL_ASSERT( ts != NULL );
19 LFDS710_MISC_BARRIER_STORE;
21 lfds710_misc_force_store();
23 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(ts->list_of_per_thread_states,lasue) )
25 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
26 libshared_pal_thread_start( &pts->thread_handle, &pts->pti );
29 ts->threadset_start_flag = RAISED;
31 LFDS710_PAL_ASSERT( ts != NULL );
33 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(ts->list_of_per_thread_states,lasue) )
35 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
36 libshared_pal_thread_wait( pts->thread_handle );
46 /****************************************************************************/
47 void libtest_threadset_thread_ready_and_wait( struct libtest_threadset_per_thread_state *pts )
49 LFDS710_PAL_ASSERT( pts != NULL );
51 pts->thread_ready_flag = RAISED;
53 LFDS710_MISC_BARRIER_FULL;
55 while( *pts->threadset_start_flag == LOWERED )
56 LFDS710_MISC_BARRIER_LOAD;