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