README
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:8k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1.   
  2.   SPILT - Solaris to POSIX Interface Layer for Threads.
  3.   
  4.   This code is public-domain, it may be freely distributed provided the
  5.   Copyright notice is retained. This code is not supported in any way.
  6.   Usage of the code is solely at the user's/programmer's discretion.
  7.   Sun Microsystems makes no claim as to the reliabilty, correctness or
  8.   suitability of this code. Sun Microsystems will not be held liable in
  9.   any way as a result loss or damage arising from the use this code.
  10.   
  11.   This package implements an interface mapping between Solaris threads and
  12.   POSIX.1c threads. The POSIX.1c material is based on the May 1994/D9 document.
  13.   
  14.   This package should make porting Solaris thread source to a POSIX.1c based
  15.   library a matter of "wedging" this interface between the Solaris thread
  16.   source and the POSIX.1c library.
  17.   
  18.   In producing the package, the goal was to acheive a high degree of mapping
  19.   between Solaris and POSIX.1c. However, certain aspects of Solaris either
  20.   do not have a POSIX.1c equivalent have only an "approximate" equivalent.
  21.   Another small set of Solaris features can only be mapped into a POSIX.1c
  22.   implementation if the implementation supports the corresponding feature.
  23.   
  24.   The package uses two macros to control the characteristics of the
  25.   package. If the macro SPILT_MACROS is defined then certain functions
  26.   and typedef's will be implemented as macros to the POSIX.1c equivalent
  27.   functions and typedef's. Otherwise, all functions and typedefs are
  28.   strictly defined in the compilation. The second macro is SPILT_LIBERAL,
  29.   refered to as the "test macro". This macro is built up from the bit-wise
  30.   or'ing of _SPILT_LIBERAL_* macros. The "liberal" macros allows the
  31.   package builder to control how tolerant the package will be of semantic
  32.   incompleteness.
  33.   
  34.   The following points describe the "approximate" mappings, how they are
  35.   implemented and how the _SPILT_LIBERAL_* macro controls behavior.
  36.   
  37.   THR_DAEMON
  38.    The thread create option for daemon threads has no equivalent in
  39.    POSIX.1c (ENOTSUP). If the test macro includes the
  40.    _SPILT_LIBERAL_DAEMON flag the option is silently ignored.
  41.   
  42.   THR_SUSPENDED
  43.    The thread create option for suspended threads has no equivalent
  44.    in POSIX.1c (ENOTSUP). If the test macro includes the
  45.    _SPILT_LIBERAL_SUSPENDED flag the option is silently ignored.
  46.   
  47.   THR_NEW_LWP
  48.    The thread create option for new LWPs has no equivalent in POSIX.1c
  49.    (ENOTSUP). If the test macro includes the _SPILT_LIBERAL_NEW_LWP
  50.    flag the option is silently ignored.
  51.   
  52.   thr_setconcurrency
  53.    This function has no equivalent mapping in POSIX.1c (ENOSYS). If          
  54.    the test macro includes the _SPILT_LIBERAL_SETCONCURRENCY flag
  55.    the funciton will return success (0).
  56.   
  57.   thr_getconcurrency
  58.    This function has no equivalent mapping in POSIX.1c (ENOSYS). If          
  59.    the test macro includes the _SPILT_LIBERAL_GETCONCURRENCY flag
  60.    the function will always return zero (0).
  61.   
  62.   thr_suspend
  63.    This function has no equivalent mapping in POSIX.1c (ENOSYS). If          
  64.    the test macro includes the _SPILT_LIBERAL_SUSPEND flag the
  65.    function will always return success (0).
  66.   
  67.   thr_continue
  68.    This function has no equivalent mapping in POSIX.1c (ENOSYS). If          
  69.    the test macro includes the _SPILT_LIBERAL_CONTINUE flag the
  70.    function will always return success (0).
  71.   
  72.   thr_create
  73.    If the POSIX.1c macro _POSIX_THREAD_PRIORITY_SCHEDULING is defined
  74.    the pthread inheretsched attribute will be set to
  75.    PTHREAD_INHERIT_SCHED.
  76.   
  77.   THR_BOUND
  78.    The thread create option for "bound" threads is only supported in
  79.    POSIX.1c if the macro _POSIX_THREAD_PRIORITY_SCHEDULING is defined.
  80.    Attempts to use THR_BOUND when the option is not supported will
  81.    return failure (ENOTSUP). If the test macro includes the
  82.    _SPILT_LIBERAL_BOUND flag the THR_BOUND option will be ignored if
  83.    not supported.
  84.   
  85.   stack
  86.    The thread create attribute for stack address is only supported if
  87.    the macro _POSIX_THREAD_ATTR_STACKADDR is defined. Attempts to use
  88.    the stack option when the option is not supported will return
  89.    failure (ENOTSUP). If the test macro includes the
  90.    _SPILT_LIBERAL_STACKADDR flag the stack option will be ignored
  91.    if not supported.
  92.   
  93.   stacksize
  94.    The thread create option for stack size is only supported if the
  95.    macro _POSIX_THREAD_ATTR_STACKSIZE is defined. Attempts to use
  96.    the stacksize option when the attribute is not supported will
  97.    return failure (ENOTSUP). If the test macro include the
  98.    _SPILT_LIBERAL_STACKSIZE flag the stacksize option will be
  99.    ignored if not supported.
  100.   
  101.   thr_setprio
  102.    The thread priority management is only supported if the macro
  103.    _POSIX_THREAD_PRIORITY_SCHEDULING is defined. Attempts to use
  104.    thread scheduling will return failure (ENOSYS). If the test macro          
  105.    includes the _SPILT_LIBERAL_SETPRIO flag attempts to modify
  106.    thread priority will always return success (0).
  107.   
  108.    [Note: Thread priority managment is crudely mapped onto POSIX.1c
  109.    scheduling (if supported by the implementation), since POSIX.1c
  110.    supports multiple thread scheduling classes (SCHED_FIFO, SCHED_RR,
  111.    SCHED_OTHER and possibly others) and Solaris only has one
  112.    scheduling class. The implemenation here is analogeous to allowing
  113.    a process to modify its priority without being able to determine
  114.    1) its scheduling class and 2) the bounds of allowable priority
  115.    values.]
  116.   
  117.   thr_getprio
  118.    The thread priority management is only supported if the macro
  119.    _POSIX_THREAD_PRIORITY_SCHEDULING is defined. Attempts to use
  120.    thread scheduling will return failure (ENOSYS). If the test macro          
  121.    includes the _SPILT_LIBERAL_GETPRIO flag attempts to retrieve
  122.    thread priority will always return success (0).
  123.   
  124.   thr_join
  125.    POSIX.1c does not support the "non-targeted" join. Attempts 
  126.    to do so are undefined.
  127.   
  128.   
  129.   XXX_init
  130.    Solaris synchronization variables are initialized to a default
  131.    state (USYNC_THREAD) by zero filling the variable. This is
  132.    achieved when the variable has external scope, i.e. it does not
  133.    have to be explicitly initialized, because ANSI C states that
  134.    all uninitialized, external data is zero-filled. In contrast,
  135.    POSIX.1c requires external synchronization objects to be
  136.    initialized by assignment of a type-specific macro. The result
  137.    of these differences is that to ensure "correct" semantics
  138.    of external Solaris synchronization objects when ported to
  139.    a POSIX.1c environment is that they must be initialized using
  140.    the appropriate XXX_init function.
  141.   
  142.   Written by Richard.Marejka@Canada.Sun.COM
  143.   Copyright (c) 1994, by Sun Microsystems, Inc.
  144. ----------------------------------------------------------------------------
  145.    Richard Marejka  Solaris 2 Migration Support Centre
  146.    October 6, 1994
  147.         richard@canada.sun.com
  148.    405-477-1159
  149.   
  150.   This package can be used to run a Solaris threads application on a
  151.   system that support POSIX threads.
  152.   
  153.   This package demonstrates that 
  154.   
  155.   a) Solaris threads is not another proprietary threads package - it
  156.      is almost identical to the POSIX proposed standard.
  157.   
  158.   b) Solaris threads programmers need not wait for POSIX to be
  159.      finalized as a standard, before they begin multithreading
  160.      their applications
  161.   
  162.   c) The differences between Solaris threads and POSIX threads
  163.      are primarily syntactic.
  164.   
  165.   In addition, although application programmers may contact OpCom to
  166.   obtain a copy of the SunSoft POSIX.1c EA package, people should be
  167.   aware that the SunSoft package is based on Draft 8 of the POSIX
  168.   standard.   The SunSoft package is not a complete implementation of
  169.   Draft 8. 
  170.   
  171.   
  172.   This package implements Solaris threads in terms of
  173.   POSIX.1c threads. This package allows an application programmer to
  174.   write a Solaris threads program, and then port the application to a
  175.   POSIX.1c based threads implentation.   This package  proves just
  176.   how small the differences are.  
  177.   
  178.   This package should not be used on Solaris systems. At this time
  179.   our POSIX.1c threads are written in terms of Solaris threads.