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 05";
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_timedwrlock: 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
0097 status = pthread_rwlock_timedwrlock(&rwlock, &abstime);
0098 rtems_test_assert( status == 0 );
0099 return NULL;
0100 }
0101
0102 void *POSIX_Init(
0103 void *argument
0104 )
0105 {
0106 int i;
0107 int status;
0108 pthread_t threadId;
0109 pthread_rwlockattr_t attr;
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 status = clock_gettime( CLOCK_REALTIME, &abstime );
0125 rtems_test_assert( !status );
0126 abstime.tv_sec += 5;
0127
0128
0129
0130
0131
0132 status = pthread_rwlockattr_init( &attr );
0133 rtems_test_assert( status == 0 );
0134 status = pthread_rwlock_init( &rwlock, &attr );
0135 rtems_test_assert( status == 0 );
0136
0137
0138
0139
0140 sched_yield();
0141
0142
0143
0144
0145 benchmark_timer_initialize();
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