⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  *  COPYRIGHT (c) 1989-1999. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: init.c,v 1.19.2.1 2003/09/04 18:46:26 joel Exp $ */#define CONFIGURE_INIT#include "system.h"#include <errno.h>#define MUTEX_BAD_ID 0xfffffffe void Print_mutexattr(  char                *msg,  pthread_mutexattr_t *attr){  int status;  int protocol;  int prioceiling;  int pshared;  /* protocol */  status = pthread_mutexattr_getprotocol( attr, &protocol );  assert( !status );  printf( "%smutex protocol is (%d) -- ", msg, protocol );  switch ( protocol ) {    case PTHREAD_PRIO_NONE:      puts( "PTHREAD_PRIO_NONE" );      break;    case PTHREAD_PRIO_INHERIT:      puts( "PTHREAD_PRIO_INHERIT" );      break;    case PTHREAD_PRIO_PROTECT:      puts( "PTHREAD_PRIO_PROTECT" );      break;    default:      puts( "UNKNOWN" );      assert( 0 );      break;  }  /* priority ceiling */  status = pthread_mutexattr_getprioceiling( attr, &prioceiling );  assert( !status );  printf( "%smutex priority ceiling is %d\n", msg, prioceiling );  /* process shared */  status = pthread_mutexattr_getpshared( attr, &pshared );  assert( !status );  printf( "%smutex process shared is (%d) -- ", msg, pshared );  switch ( pshared ) {    case PTHREAD_PROCESS_PRIVATE:      puts( "PTHREAD_PROCESS_PRIVATE" );      break;    case PTHREAD_PROCESS_SHARED:      puts( "PTHREAD_PROCESS_SHARED" );      break;    default:      puts( "UNKNOWN" );      assert( 0 );      break;  }}void *POSIX_Init(  void *argument){  int                  status;  pthread_mutexattr_t  attr;  pthread_mutexattr_t  destroyed_attr;  struct timespec      times;  struct sched_param   param;  int                  pshared;  int                  policy;  int                  protocol;  int                  ceiling;  int                  old_ceiling;  assert( MUTEX_BAD_ID != PTHREAD_MUTEX_INITIALIZER );  Mutex_bad_id = MUTEX_BAD_ID;   puts( "\n\n*** POSIX TEST 5 ***" );  /* set the time of day, and print our buffer in multiple ways */  set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 );  /* get id of this thread */  Init_id = pthread_self();  printf( "Init's ID is 0x%08x\n", Init_id );    /* tes pthread_mutex_attr_init */  puts( "Init: pthread_mutexattr_init - EINVAL (NULL attr)" );  status = pthread_mutexattr_init( NULL );  assert( status == EINVAL );  puts( "Init: pthread_mutexattr_init - SUCCESSFUL" );  status = pthread_mutexattr_init( &attr );  assert( !status );  Print_mutexattr( "Init: ", &attr );  /* create an "uninitialized" attribute structure */  status = pthread_mutexattr_init( &destroyed_attr );  assert( !status );  puts( "Init: pthread_mutexattr_destroy - SUCCESSFUL" );  status = pthread_mutexattr_destroy( &destroyed_attr );  assert( !status );  puts( "Init: pthread_mutexattr_destroy - EINVAL (NULL attr)" );  status = pthread_mutexattr_destroy( NULL );  assert( status == EINVAL );  puts( "Init: pthread_mutexattr_destroy - EINVAL (not initialized)" );  status = pthread_mutexattr_destroy( &destroyed_attr );  assert( status == EINVAL );  /* error cases for set and get pshared attribute */  empty_line();  puts( "Init: pthread_mutexattr_getpshared - EINVAL (NULL attr)" );  status = pthread_mutexattr_getpshared( NULL, &pshared );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_getpshared - EINVAL (NULL pshared)" );  status = pthread_mutexattr_getpshared( &attr, NULL );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_getpshared - EINVAL (not initialized)" );  status = pthread_mutexattr_getpshared( &destroyed_attr, &pshared );  assert( status == EINVAL );  pshared = PTHREAD_PROCESS_PRIVATE;  puts( "Init: pthread_mutexattr_setpshared - EINVAL (NULL attr)" );  status = pthread_mutexattr_setpshared( NULL, pshared );  assert( status == EINVAL );   pshared = PTHREAD_PROCESS_PRIVATE;  puts( "Init: pthread_mutexattr_setpshared - EINVAL (not initialized)" );  status = pthread_mutexattr_setpshared( &destroyed_attr, pshared );  assert( status == EINVAL );  /* error cases for set and get protocol attribute */  empty_line();  puts( "Init: pthread_mutexattr_getprotocol - EINVAL (NULL attr)" );  status = pthread_mutexattr_getprotocol( NULL, &protocol );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_getprotocol - EINVAL (NULL protocol)" );  status = pthread_mutexattr_getprotocol( &attr, NULL );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_getprotocol - EINVAL (not initialized)" );  status = pthread_mutexattr_getprotocol( &destroyed_attr, &protocol );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_setprotocol - EINVAL (NULL attr)" );  status = pthread_mutexattr_setprotocol( NULL, PTHREAD_PRIO_NONE );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_setprotocol - EINVAL (invalid protocol)" );  status = pthread_mutexattr_setprotocol( &attr, -1 );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_setprotocol - EINVAL (not initialized)" );  status = pthread_mutexattr_setprotocol( &destroyed_attr, -1 );  assert( status == EINVAL );  /* error cases for set and get prioceiling attribute */  empty_line();   puts( "Init: pthread_mutexattr_getprioceiling - EINVAL (NULL attr)" );  status = pthread_mutexattr_getprioceiling( NULL, &ceiling );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_getprioceiling - EINVAL (NULL prioceiling)" );  status = pthread_mutexattr_getprioceiling( &attr, NULL );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_getprioceiling - EINVAL (not initialized)" );  status = pthread_mutexattr_getprioceiling( &destroyed_attr, &ceiling );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_setprioceiling - EINVAL (NULL attr)" );  status = pthread_mutexattr_setprioceiling( NULL, 128 );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_setprioceiling - EINVAL (invalid priority)" );  status = pthread_mutexattr_setprioceiling( &attr, 512 );  if ( status != EINVAL )    printf( "status = %d\n", status );  assert( status == EINVAL );   puts( "Init: pthread_mutexattr_setprioceiling - EINVAL (not initialized)" );  status = pthread_mutexattr_setprioceiling( &destroyed_attr, -1 );  assert( status == EINVAL );  /* create a thread */  status = pthread_create( &Task_id, NULL, Task_1, NULL );  assert( !status );  /* now try some basic mutex operations */  empty_line();  puts( "Init: pthread_mutex_init - EINVAL (NULL mutex_id)" );  status = pthread_mutex_init( NULL, &attr );  assert( status == EINVAL );  puts( "Init: pthread_mutex_init - EINVAL (not initialized attr)" );  status = pthread_mutex_init( &Mutex_id, &destroyed_attr );  assert( status == EINVAL );  /* must get around error checks in attribute set routines */  attr.protocol = -1;  puts( "Init: pthread_mutex_init - EINVAL (bad protocol)" );  status = pthread_mutex_init( &Mutex_id, &attr );  assert( status == EINVAL );  /* must get around error checks in attribute set routines */  attr.protocol = PTHREAD_PRIO_INHERIT;  attr.prio_ceiling = -1;  puts( "Init: pthread_mutex_init - EINVAL (bad priority ceiling)" );  status = pthread_mutex_init( &Mutex_id, &attr );  assert( status == EINVAL );  /* now set up for a success pthread_mutex_init */  puts( "Init: Resetting mutex attributes" );  status = pthread_mutexattr_init( &attr );  assert( !status );  puts( "Init: Changing mutex attributes" );  status = pthread_mutexattr_setprotocol( &attr, PTHREAD_PRIO_INHERIT );  assert( !status );   status = pthread_mutexattr_setprioceiling( &attr, 128 );  assert( !status );   status = pthread_mutexattr_setpshared( &attr, PTHREAD_PROCESS_SHARED );  assert( !status );   Print_mutexattr( "Init: ", &attr );   puts( "Init: Resetting mutex attributes" );  status = pthread_mutexattr_init( &attr );  assert( !status );  /*   *  Set the protocol to priority ceiling so the owner check happens   *  and the EPERM test (later) will work.   */  status = pthread_mutexattr_setprotocol( &attr, PTHREAD_PRIO_INHERIT );  assert( !status );   puts( "Init: pthread_mutex_init - SUCCESSFUL" );  status = pthread_mutex_init( &Mutex_id, &attr );  if ( status )    printf( "status = %d\n", status );  assert( !status );  /*   *  This is not required to be an error and when it is, there are   *  behavioral conflicts with other implementations.   */  puts( "Init: pthread_mutex_init - EBUSY (reinitialize an existing mutex) - skipped" );#if 0  status = pthread_mutex_init( &Mutex_id, &attr );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -