File indexing completed on 2025-05-11 08:24:41
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #if !defined(OPERATION_COUNT)
0030 #define OPERATION_COUNT 100
0031 #endif
0032
0033 #ifdef HAVE_CONFIG_H
0034 #include "config.h"
0035 #endif
0036
0037 #include <timesys.h>
0038 #include <tmacros.h>
0039 #include <rtems/btimer.h>
0040 #include "test_support.h"
0041
0042 #include <pthread.h>
0043 #include <sched.h>
0044
0045 const char rtems_test_name[] = "PSXTMBARRIER 02";
0046
0047
0048 void *POSIX_Init(void *argument);
0049 void *Middle(void *argument);
0050 void *Low(void *argument);
0051
0052 pthread_barrier_t barrier;
0053
0054 void *Low(
0055 void *argument
0056 )
0057 {
0058 benchmark_timer_t end_time;
0059
0060
0061
0062
0063
0064
0065 sched_yield();
0066
0067
0068 end_time = benchmark_timer_read();
0069
0070 put_time(
0071 "pthread_barrier_wait: blocking",
0072 end_time,
0073 OPERATION_COUNT,
0074 0,
0075 0
0076 );
0077
0078 TEST_END();
0079
0080 rtems_test_exit( 0 );
0081 return NULL;
0082 }
0083
0084 void *Middle(
0085 void *argument
0086 )
0087 {
0088
0089
0090
0091
0092
0093 sched_yield();
0094
0095
0096 (void) pthread_barrier_wait( &barrier );
0097
0098
0099 rtems_test_assert( FALSE );
0100 return NULL;
0101 }
0102
0103 void *POSIX_Init(
0104 void *argument
0105 )
0106 {
0107 int i;
0108 int status;
0109 pthread_t threadId;
0110 pthread_barrierattr_t attr;
0111
0112 TEST_BEGIN();
0113
0114 for ( i=0 ; i < OPERATION_COUNT - 1 ; i++ ) {
0115 status = pthread_create( &threadId, NULL, Middle, NULL );
0116 rtems_test_assert( !status );
0117 }
0118
0119 status = pthread_create( &threadId, NULL, Low, NULL );
0120 rtems_test_assert( !status );
0121
0122
0123
0124
0125
0126
0127 status = pthread_barrierattr_init( &attr );
0128 rtems_test_assert( status == 0 );
0129
0130
0131
0132
0133
0134 status = pthread_barrier_init( &barrier,&attr, OPERATION_COUNT + 2 );
0135 rtems_test_assert( status == 0 );
0136
0137
0138
0139
0140 sched_yield();
0141
0142
0143
0144
0145
0146 benchmark_timer_initialize();
0147
0148 status = pthread_barrier_wait( &barrier );
0149 rtems_test_assert( status == 0 );
0150 return NULL;
0151 }
0152
0153
0154
0155 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0156 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0157
0158 #define CONFIGURE_MAXIMUM_POSIX_THREADS OPERATION_COUNT + 2
0159 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0160
0161 #define CONFIGURE_INIT
0162
0163 #include <rtems/confdefs.h>
0164