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 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <timesys.h>
0034 #include <rtems/btimer.h>
0035 #include <errno.h>
0036 #include <pthread.h>
0037 #include "test_support.h"
0038
0039 const char rtems_test_name[] = "PSXTMMUTEX 03";
0040
0041
0042 void *POSIX_Init(void *argument);
0043 void benchmark_mutex_lock_available(void);
0044 void benchmark_mutex_unlock_no_threads_waiting(void);
0045 void benchmark_mutex_trylock_available(void);
0046 void benchmark_mutex_trylock_not_available(void);
0047 void benchmark_mutex_timedlock_available(void);
0048
0049 pthread_mutex_t MutexId;
0050
0051 void benchmark_mutex_lock_available(void)
0052 {
0053 benchmark_timer_t end_time;
0054 int status;
0055
0056 benchmark_timer_initialize();
0057 status = pthread_mutex_lock( &MutexId );
0058 end_time = benchmark_timer_read();
0059 rtems_test_assert( !status );
0060
0061 put_time(
0062 "pthread_mutex_lock: available",
0063 end_time,
0064 1,
0065 0,
0066 0
0067 );
0068 }
0069
0070 void benchmark_mutex_unlock_no_threads_waiting(void)
0071 {
0072 benchmark_timer_t end_time;
0073 int status;
0074
0075 benchmark_timer_initialize();
0076 status = pthread_mutex_unlock( &MutexId );
0077 end_time = benchmark_timer_read();
0078 rtems_test_assert( !status );
0079
0080 put_time(
0081 "pthread_mutex_unlock: no threads waiting",
0082 end_time,
0083 1,
0084 0,
0085 0
0086 );
0087 }
0088
0089 void benchmark_mutex_trylock_available(void)
0090 {
0091 benchmark_timer_t end_time;
0092 int status;
0093
0094 benchmark_timer_initialize();
0095 status = pthread_mutex_trylock( &MutexId );
0096 end_time = benchmark_timer_read();
0097 rtems_test_assert( !status );
0098
0099 put_time(
0100 "pthread_mutex_trylock: available",
0101 end_time,
0102 1,
0103 0,
0104 0
0105 );
0106 }
0107
0108 void benchmark_mutex_trylock_not_available(void)
0109 {
0110 benchmark_timer_t end_time;
0111 int status;
0112
0113 benchmark_timer_initialize();
0114 status = pthread_mutex_trylock( &MutexId );
0115
0116
0117
0118
0119
0120 end_time = benchmark_timer_read();
0121 rtems_test_assert( status );
0122
0123 put_time(
0124 "pthread_mutex_trylock: not available",
0125 end_time,
0126 1,
0127 0,
0128 0
0129 );
0130 }
0131
0132 void benchmark_mutex_timedlock_available(void)
0133 {
0134 benchmark_timer_t end_time;
0135 int status;
0136
0137 benchmark_timer_initialize();
0138 status = pthread_mutex_timedlock( &MutexId, 0 );
0139 end_time = benchmark_timer_read();
0140 rtems_test_assert( !status );
0141
0142 put_time(
0143 "pthread_mutex_timedlock: available",
0144 end_time,
0145 1,
0146 0,
0147 0
0148 );
0149 }
0150
0151 void *POSIX_Init(
0152 void *argument
0153 )
0154 {
0155 int status;
0156
0157 TEST_BEGIN();
0158
0159
0160
0161
0162 status = pthread_mutex_init( &MutexId, NULL );
0163 rtems_test_assert( !status );
0164
0165
0166
0167
0168
0169 benchmark_mutex_lock_available();
0170 benchmark_mutex_unlock_no_threads_waiting();
0171 benchmark_mutex_trylock_available();
0172 benchmark_mutex_trylock_not_available();
0173 benchmark_mutex_unlock_no_threads_waiting();
0174 benchmark_mutex_timedlock_available();
0175 benchmark_mutex_unlock_no_threads_waiting();
0176
0177
0178
0179
0180
0181 status = pthread_mutex_destroy( &MutexId );
0182 rtems_test_assert( !status );
0183
0184 TEST_END();
0185
0186 rtems_test_exit(0);
0187 }
0188
0189
0190
0191 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0192 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0193
0194 #define CONFIGURE_MAXIMUM_POSIX_THREADS 1
0195 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0196
0197 #define CONFIGURE_INIT
0198
0199 #include <rtems/confdefs.h>
0200