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 <errno.h>
0038 #include <fcntl.h>
0039 #include <semaphore.h>
0040 #include <tmacros.h>
0041 #include <timesys.h>
0042 #include <rtems/btimer.h>
0043 #include "test_support.h"
0044 #include <pthread.h>
0045 #include <sched.h>
0046
0047 const char rtems_test_name[] = "PSXTMSEM 03";
0048
0049
0050 void *POSIX_Init(void *argument);
0051 void *Middle(void *argument);
0052 void *Low(void *argument);
0053
0054 #define MAX_SEMS 2
0055
0056 sem_t sem1;
0057
0058 void *Low(
0059 void *argument
0060 )
0061 {
0062 benchmark_timer_t end_time;
0063
0064
0065
0066
0067
0068
0069 sched_yield();
0070
0071
0072 end_time = benchmark_timer_read();
0073
0074 put_time(
0075 "sem_wait: not available block",
0076 end_time,
0077 OPERATION_COUNT,
0078 0,
0079 0
0080 );
0081
0082 TEST_END();
0083
0084 rtems_test_exit( 0 );
0085 return NULL;
0086 }
0087
0088 void *Middle(
0089 void *argument
0090 )
0091 {
0092
0093
0094
0095
0096
0097 sched_yield();
0098
0099
0100 (void) sem_wait( &sem1 );
0101 rtems_test_assert( FALSE );
0102 return NULL;
0103 }
0104
0105 void *POSIX_Init(
0106 void *argument
0107 )
0108 {
0109 int i;
0110 int status;
0111 pthread_t threadId;
0112
0113 TEST_BEGIN();
0114
0115 for ( i=0 ; i < OPERATION_COUNT - 1 ; i++ ) {
0116 status = pthread_create( &threadId, NULL, Middle, NULL );
0117 rtems_test_assert( status == 0 );
0118 }
0119
0120 status = pthread_create( &threadId, NULL, Low, NULL );
0121 rtems_test_assert( status == 0 );
0122
0123
0124
0125
0126
0127 status = sem_init( &sem1, 0, 1 );
0128 rtems_test_assert( status == 0 );
0129
0130
0131
0132
0133
0134 sched_yield();
0135
0136
0137
0138 benchmark_timer_initialize();
0139 status = sem_wait(&sem1);
0140 rtems_test_assert( status == 0 );
0141 return NULL;
0142 }
0143
0144
0145
0146 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0147 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0148
0149 #define CONFIGURE_MAXIMUM_POSIX_THREADS OPERATION_COUNT + 2
0150 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0151
0152 #define CONFIGURE_INIT
0153
0154 #include <rtems/confdefs.h>
0155