zoukankan      html  css  js  c++  java
  • pthread 的几个结构体

    http://blog.csdn.net/yangzhongxuan/article/details/7397139

    /* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.

    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    The GNU C Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with the GNU C Library; if not, write to the Free
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA. */

    #ifndef _BITS_PTHREADTYPES_H
    #define _BITS_PTHREADTYPES_H 1

    #include <bits/wordsize.h>

    #if __WORDSIZE == 64
    # define __SIZEOF_PTHREAD_ATTR_T 56
    # define __SIZEOF_PTHREAD_MUTEX_T 40
    # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
    # define __SIZEOF_PTHREAD_COND_T 48
    # define __SIZEOF_PTHREAD_CONDATTR_T 4
    # define __SIZEOF_PTHREAD_RWLOCK_T 56
    # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
    # define __SIZEOF_PTHREAD_BARRIER_T 32
    # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
    #else
    # define __SIZEOF_PTHREAD_ATTR_T 36
    # define __SIZEOF_PTHREAD_MUTEX_T 24
    # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
    # define __SIZEOF_PTHREAD_COND_T 48
    # define __SIZEOF_PTHREAD_CONDATTR_T 4
    # define __SIZEOF_PTHREAD_RWLOCK_T 32
    # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
    # define __SIZEOF_PTHREAD_BARRIER_T 20
    # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
    #endif


    /* Thread identifiers. The structure of the attribute type is not
    exposed on purpose. */
    typedef unsigned long int pthread_t;


    typedef union
    {
    char __size[__SIZEOF_PTHREAD_ATTR_T];
    long int __align;
    } pthread_attr_t;


    #if __WORDSIZE == 64
    typedef struct __pthread_internal_list
    {
    struct __pthread_internal_list *__prev;
    struct __pthread_internal_list *__next;
    } __pthread_list_t;
    #else
    typedef struct __pthread_internal_slist
    {
    struct __pthread_internal_slist *__next;
    } __pthread_slist_t;
    #endif


    /* Data structures for mutex handling. The structure of the attribute
    type is not exposed on purpose. */
    typedef union
    {
    struct __pthread_mutex_s
    {
    int __lock;
    unsigned int __count;
    int __owner;
    #if __WORDSIZE == 64
    unsigned int __nusers;
    #endif
    /* KIND must stay at this position in the structure to maintain
    binary compatibility. */
    int __kind;
    #if __WORDSIZE == 64
    int __spins;
    __pthread_list_t __list;
    # define __PTHREAD_MUTEX_HAVE_PREV 1
    #else
    unsigned int __nusers;
    __extension__ union
    {
    int __spins;
    __pthread_slist_t __list;
    };
    #endif
    } __data;
    char __size[__SIZEOF_PTHREAD_MUTEX_T];
    long int __align;
    } pthread_mutex_t;

    typedef union
    {
    char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
    int __align;
    } pthread_mutexattr_t;


    /* Data structure for conditional variable handling. The structure of
    the attribute type is not exposed on purpose. */
    typedef union
    {
    struct
    {
    int __lock;
    unsigned int __futex;
    __extension__ unsigned long long int __total_seq;
    __extension__ unsigned long long int __wakeup_seq;
    __extension__ unsigned long long int __woken_seq;
    void *__mutex;
    unsigned int __nwaiters;
    unsigned int __broadcast_seq;
    } __data;
    char __size[__SIZEOF_PTHREAD_COND_T];
    __extension__ long long int __align;
    } pthread_cond_t;

    typedef union
    {
    char __size[__SIZEOF_PTHREAD_CONDATTR_T];
    int __align;
    } pthread_condattr_t;


    /* Keys for thread-specific data */
    typedef unsigned int pthread_key_t;


    /* Once-only execution */
    typedef int pthread_once_t;


    #if defined __USE_UNIX98 || defined __USE_XOPEN2K
    /* Data structure for read-write lock variable handling. The
    structure of the attribute type is not exposed on purpose. */
    typedef union
    {
    # if __WORDSIZE == 64
    struct
    {
    int __lock;
    unsigned int __nr_readers;
    unsigned int __readers_wakeup;
    unsigned int __writer_wakeup;
    unsigned int __nr_readers_queued;
    unsigned int __nr_writers_queued;
    int __writer;
    int __shared;
    unsigned long int __pad1;
    unsigned long int __pad2;
    /* FLAGS must stay at this position in the structure to maintain
    binary compatibility. */
    unsigned int __flags;
    } __data;
    # else
    struct
    {
    int __lock;
    unsigned int __nr_readers;
    unsigned int __readers_wakeup;
    unsigned int __writer_wakeup;
    unsigned int __nr_readers_queued;
    unsigned int __nr_writers_queued;
    /* FLAGS must stay at this position in the structure to maintain
    binary compatibility. */
    unsigned char __flags;
    unsigned char __shared;
    unsigned char __pad1;
    unsigned char __pad2;
    int __writer;
    } __data;
    # endif
    char __size[__SIZEOF_PTHREAD_RWLOCK_T];
    long int __align;
    } pthread_rwlock_t;

    typedef union
    {
    char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
    long int __align;
    } pthread_rwlockattr_t;
    #endif


    #ifdef __USE_XOPEN2K
    /* POSIX spinlock data type. */
    typedef volatile int pthread_spinlock_t;


    /* POSIX barriers data type. The structure of the type is
    deliberately not exposed. */
    typedef union
    {
    char __size[__SIZEOF_PTHREAD_BARRIER_T];
    long int __align;
    } pthread_barrier_t;

    typedef union
    {
    char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
    int __align;
    } pthread_barrierattr_t;
    #endif


    #if __WORDSIZE == 32
    /* Extra attributes for the cleanup functions. */
    # define __cleanup_fct_attribute __attribute__ ((__regparm__ (1)))
    #endif

    #endif /* bits/pthreadtypes.h */

  • 相关阅读:
    折腾,折腾!VM7.0 虚拟机安装雪豹Mac OS snow leopard 10.6!
    STM32启动代码概述
    【淘宝装修】PS DW 介绍 教程 代码(终极篇)
    讲讲volatile的作用
    MSB与LSB
    PLL
    Bootloader之uBoot简介(转)
    AMBA、AHB、APB总线简介
    安装VMWARE WORKSTATION,提示“你已经安装过VMware,请先卸载后再安装”的解决方法
    YII 建立目录项目 YIIC
  • 原文地址:https://www.cnblogs.com/feng9exe/p/6797552.html
Copyright © 2011-2022 走看看