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