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 <tmacros.h>
0034 #include <timesys.h>
0035 #include "test_support.h"
0036 #include <pthread.h>
0037 #include <sched.h>
0038 #include <rtems/btimer.h>
0039
0040 const char rtems_test_name[] = "PSXTMCOND 04";
0041
0042
0043 void *POSIX_Init(void *argument);
0044 void *Blocker(void *argument);
0045
0046 pthread_mutex_t MutexID;
0047 pthread_cond_t CondID;
0048
0049 void *Blocker(
0050 void *argument
0051 )
0052 {
0053
0054 uint32_t end_time;
0055 struct sched_param param;
0056 int policy;
0057 int status;
0058
0059 status = pthread_mutex_lock(&MutexID);
0060 rtems_test_assert( status == 0 );
0061 status = pthread_getschedparam(pthread_self(), &policy, ¶m);
0062 rtems_test_assert( status == 0 );
0063 param.sched_priority = sched_get_priority_max(policy) - 1;
0064 status = pthread_setschedparam(pthread_self(), policy, ¶m);
0065
0066 pthread_cond_wait(&CondID,&MutexID);
0067
0068
0069 end_time = benchmark_timer_read();
0070 put_time(
0071 "pthread_cond_signal: thread waiting preempt",
0072 end_time,
0073 1,
0074 0,
0075 0
0076 );
0077 TEST_END();
0078 rtems_test_exit( 0 );
0079 return NULL;
0080 }
0081
0082 void *POSIX_Init(
0083 void *argument
0084 )
0085 {
0086 int status;
0087 pthread_t threadId;
0088
0089 TEST_BEGIN();
0090
0091 status = pthread_create( &threadId, NULL, Blocker, NULL );
0092 rtems_test_assert( status == 0 );
0093
0094 status = pthread_mutex_init(&MutexID, NULL);
0095 rtems_test_assert( status == 0 );
0096
0097 status = pthread_cond_init(&CondID, NULL);
0098 rtems_test_assert( status == 0 );
0099
0100
0101
0102
0103
0104 sched_yield();
0105
0106
0107
0108 benchmark_timer_initialize();
0109 status = pthread_cond_signal(&CondID);
0110 rtems_test_assert ( status == 0 );
0111 return NULL;
0112 }
0113
0114
0115
0116 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0117 #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
0118
0119 #define CONFIGURE_MAXIMUM_POSIX_THREADS 2
0120 #define CONFIGURE_POSIX_INIT_THREAD_TABLE
0121
0122 #define CONFIGURE_INIT
0123
0124 #include <rtems/confdefs.h>
0125