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 04";
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
0049 void *Low(
0050 void *argument
0051 )
0052 {
0053 benchmark_timer_t end_time;
0054
0055
0056
0057
0058
0059
0060 sched_yield();
0061
0062
0063 end_time = benchmark_timer_read();
0064
0065 put_time(
0066 "pthread_rwlock_wrlock: not available blocks",
0067 end_time,
0068 OPERATION_COUNT,
0069 0,
0070 0
0071 );
0072
0073 TEST_END();
0074
0075 rtems_test_exit( 0 );
0076 return NULL;
0077 }
0078
0079 void *Middle(
0080 void *argument
0081 )
0082 {
0083 int status;
0084
0085
0086
0087
0088
0089
0090 sched_yield();
0091
0092
0093
0094
0095 status = pthread_rwlock_wrlock(&rwlock);
0096 rtems_test_assert( status == 0 );
0097 return NULL;
0098 }
0099
0100 void *POSIX_Init(
0101 void *argument
0102 )
0103 {
0104 int i;
0105 int status;
0106 pthread_t threadId;
0107 pthread_rwlockattr_t attr;
0108
0109 TEST_BEGIN();
0110
0111 for ( i=0 ; i < OPERATION_COUNT - 1 ; i++ ) {
0112 status = pthread_create( &threadId, NULL, Middle, NULL );
0113 rtems_test_assert( !status );
0114 }
0115
0116 status = pthread_create( &threadId, NULL, Low, NULL );
0117 rtems_test_assert( !status );
0118
0119
0120
0121
0122
0123 status = pthread_rwlockattr_init( &attr );
0124 rtems_test_assert( status == 0 );
0125 status = pthread_rwlock_init( &rwlock, &attr );
0126 rtems_test_assert( status == 0 );
0127
0128
0129
0130
0131 sched_yield();
0132
0133
0134
0135 benchmark_timer_initialize();
0136
0137 status = pthread_rwlock_wrlock(&rwlock);
0138 rtems_test_assert( status == 0 );
0139 return NULL;
0140 }
0141
0142
0143
0144 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0145 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0146
0147 #define CONFIGURE_MAXIMUM_POSIX_THREADS OPERATION_COUNT + 2
0148 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0149
0150 #define CONFIGURE_INIT
0151
0152 #include <rtems/confdefs.h>
0153