亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? libc-lock.h

?? linux下的C語言庫源碼有一百多M解壓后很不錯
?? H
?? 第 1 頁 / 共 2 頁
字號:
/* libc-internal interface for mutex locks.  NPTL version.   Copyright (C) 1996-2003, 2005, 2007 Free Software Foundation, Inc.   This file is part of the GNU C Library.   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; see the file COPYING.LIB.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */#ifndef _BITS_LIBC_LOCK_H#define _BITS_LIBC_LOCK_H 1#include <pthread.h>#define __need_NULL#include <stddef.h>/* Fortunately Linux now has a mean to do locking which is realtime   safe without the aid of the thread library.  We also need no fancy   options like error checking mutexes etc.  We only need simple   locks, maybe recursive.  This can be easily and cheaply implemented   using futexes.  We will use them everywhere except in ld.so since   ld.so might be used on old kernels with a different libc.so.  */#ifdef _LIBC# include <lowlevellock.h># include <tls.h># include <pthread-functions.h>#endif/* Mutex type.  */#if defined _LIBC || defined _IO_MTSAFE_IO# if (defined NOT_IN_libc && !defined IS_IN_libpthread) || !defined _LIBCtypedef pthread_mutex_t __libc_lock_t;typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t;# elsetypedef int __libc_lock_t;typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t;# endiftypedef struct { pthread_mutex_t mutex; } __rtld_lock_recursive_t;# ifdef __USE_UNIX98typedef pthread_rwlock_t __libc_rwlock_t;# elsetypedef struct __libc_rwlock_opaque__ __libc_rwlock_t;# endif#elsetypedef struct __libc_lock_opaque__ __libc_lock_t;typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;typedef struct __libc_rwlock_opaque__ __libc_rwlock_t;#endif/* Type for key to thread-specific data.  */typedef pthread_key_t __libc_key_t;/* Define a lock variable NAME with storage class CLASS.  The lock must be   initialized with __libc_lock_init before it can be used (or define it   with __libc_lock_define_initialized, below).  Use `extern' for CLASS to   declare a lock defined in another module.  In public structure   definitions you must use a pointer to the lock structure (i.e., NAME   begins with a `*'), because its storage size will not be known outside   of libc.  */#define __libc_lock_define(CLASS,NAME) \  CLASS __libc_lock_t NAME;#define __libc_rwlock_define(CLASS,NAME) \  CLASS __libc_rwlock_t NAME;#define __libc_lock_define_recursive(CLASS,NAME) \  CLASS __libc_lock_recursive_t NAME;#define __rtld_lock_define_recursive(CLASS,NAME) \  CLASS __rtld_lock_recursive_t NAME;/* Define an initialized lock variable NAME with storage class CLASS.   For the C library we take a deeper look at the initializer.  For   this implementation all fields are initialized to zero.  Therefore   we don't initialize the variable which allows putting it into the   BSS section.  (Except on PA-RISC and other odd architectures, where   initialized locks must be set to one due to the lack of normal   atomic operations.) */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# if LLL_LOCK_INITIALIZER == 0#  define __libc_lock_define_initialized(CLASS,NAME) \  CLASS __libc_lock_t NAME;# else#  define __libc_lock_define_initialized(CLASS,NAME) \  CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER;# endif#else# if __LT_SPINLOCK_INIT == 0#  define __libc_lock_define_initialized(CLASS,NAME) \  CLASS __libc_lock_t NAME;# else#  define __libc_lock_define_initialized(CLASS,NAME) \  CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER;# endif#endif#define __libc_rwlock_define_initialized(CLASS,NAME) \  CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;/* Define an initialized recursive lock variable NAME with storage   class CLASS.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# if LLL_LOCK_INITIALIZER == 0#  define __libc_lock_define_initialized_recursive(CLASS,NAME) \  CLASS __libc_lock_recursive_t NAME;# else#  define __libc_lock_define_initialized_recursive(CLASS,NAME) \  CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER;# endif# define _LIBC_LOCK_RECURSIVE_INITIALIZER \  { LLL_LOCK_INITIALIZER, 0, NULL }#else# define __libc_lock_define_initialized_recursive(CLASS,NAME) \  CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER;# define _LIBC_LOCK_RECURSIVE_INITIALIZER \  {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}#endif#define __rtld_lock_define_initialized_recursive(CLASS,NAME) \  CLASS __rtld_lock_recursive_t NAME = _RTLD_LOCK_RECURSIVE_INITIALIZER;#define _RTLD_LOCK_RECURSIVE_INITIALIZER \  {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP}#define __rtld_lock_initialize(NAME) \  (void) ((NAME) = (__rtld_lock_recursive_t) _RTLD_LOCK_RECURSIVE_INITIALIZER)/* If we check for a weakly referenced symbol and then perform a   normal jump to it te code generated for some platforms in case of   PIC is unnecessarily slow.  What would happen is that the function   is first referenced as data and then it is called indirectly   through the PLT.  We can make this a direct jump.  */#ifdef __PIC__# define __libc_maybe_call(FUNC, ARGS, ELSE) \  (__extension__ ({ __typeof (FUNC) *_fn = (FUNC); \                    _fn != NULL ? (*_fn) ARGS : ELSE; }))#else# define __libc_maybe_call(FUNC, ARGS, ELSE) \  (FUNC != NULL ? FUNC ARGS : ELSE)#endif/* Call thread functions through the function pointer table.  */#if defined SHARED && !defined NOT_IN_libc# define PTFAVAIL(NAME) __libc_pthread_functions_init# define __libc_ptf_call(FUNC, ARGS, ELSE) \  (__libc_pthread_functions_init ? PTHFCT_CALL (ptr_##FUNC, ARGS) : ELSE)# define __libc_ptf_call_always(FUNC, ARGS) \  PTHFCT_CALL (ptr_##FUNC, ARGS)#else# define PTFAVAIL(NAME) (NAME != NULL)# define __libc_ptf_call(FUNC, ARGS, ELSE) \  __libc_maybe_call (FUNC, ARGS, ELSE)# define __libc_ptf_call_always(FUNC, ARGS) \  FUNC ARGS#endif/* Initialize the named lock variable, leaving it in a consistent, unlocked   state.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_init(NAME) ((NAME) = LLL_LOCK_INITIALIZER, 0)#else# define __libc_lock_init(NAME) \  __libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)#endif#if defined SHARED && !defined NOT_IN_libc/* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER, 0) is   inefficient.  */# define __libc_rwlock_init(NAME) \  (__builtin_memset (&(NAME), '\0', sizeof (NAME)), 0)#else# define __libc_rwlock_init(NAME) \  __libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0)#endif/* Same as last but this time we initialize a recursive mutex.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_init_recursive(NAME) \  ((NAME) = (__libc_lock_recursive_t) _LIBC_LOCK_RECURSIVE_INITIALIZER, 0)#else# define __libc_lock_init_recursive(NAME) \  do {									      \    if (__pthread_mutex_init != NULL)					      \      {									      \	pthread_mutexattr_t __attr;					      \	__pthread_mutexattr_init (&__attr);				      \	__pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP);    \	__pthread_mutex_init (&(NAME).mutex, &__attr);			      \	__pthread_mutexattr_destroy (&__attr);				      \      }									      \  } while (0)#endif#define __rtld_lock_init_recursive(NAME) \  do {									      \    if (__pthread_mutex_init != NULL)					      \      {									      \	pthread_mutexattr_t __attr;					      \	__pthread_mutexattr_init (&__attr);				      \	__pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP);    \	__pthread_mutex_init (&(NAME).mutex, &__attr);			      \	__pthread_mutexattr_destroy (&__attr);				      \      }									      \  } while (0)/* Finalize the named lock variable, which must be locked.  It cannot be   used again until __libc_lock_init is called again on it.  This must be   called on a lock variable before the containing storage is reused.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_fini(NAME) ((void) 0)#else# define __libc_lock_fini(NAME) \  __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)#endif#if defined SHARED && !defined NOT_IN_libc# define __libc_rwlock_fini(NAME) ((void) 0)#else# define __libc_rwlock_fini(NAME) \  __libc_maybe_call (__pthread_rwlock_destroy, (&(NAME)), 0)#endif/* Finalize recursive named lock.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_fini_recursive(NAME) ((void) 0)#else# define __libc_lock_fini_recursive(NAME) \  __libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)#endif/* Lock the named lock variable.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_lock(NAME) \  ({ lll_lock (NAME, LLL_PRIVATE); 0; })#else# define __libc_lock_lock(NAME) \  __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0)#endif#define __libc_rwlock_rdlock(NAME) \  __libc_ptf_call (__pthread_rwlock_rdlock, (&(NAME)), 0)#define __libc_rwlock_wrlock(NAME) \  __libc_ptf_call (__pthread_rwlock_wrlock, (&(NAME)), 0)/* Lock the recursive named lock variable.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_lock_recursive(NAME) \  do {									      \    void *self = THREAD_SELF;						      \    if ((NAME).owner != self)						      \      {									      \	lll_lock ((NAME).lock, LLL_PRIVATE);				      \	(NAME).owner = self;						      \      }									      \    ++(NAME).cnt;							      \  } while (0)#else# define __libc_lock_lock_recursive(NAME) \  __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0)#endif/* Try to lock the named lock variable.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_trylock(NAME) \  lll_trylock (NAME)#else# define __libc_lock_trylock(NAME) \  __libc_maybe_call (__pthread_mutex_trylock, (&(NAME)), 0)#endif#define __libc_rwlock_tryrdlock(NAME) \  __libc_maybe_call (__pthread_rwlock_tryrdlock, (&(NAME)), 0)#define __libc_rwlock_trywrlock(NAME) \  __libc_maybe_call (__pthread_rwlock_trywrlock, (&(NAME)), 0)/* Try to lock the recursive named lock variable.  */#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)# define __libc_lock_trylock_recursive(NAME) \  ({									      \    int result = 0;							      \    void *self = THREAD_SELF;						      \    if ((NAME).owner != self)						      \      {									      \	if (lll_trylock ((NAME).lock) == 0)				      \	  {								      \	    (NAME).owner = self;					      \	    (NAME).cnt = 1;						      \

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品久久一区| 亚洲欧美另类久久久精品2019| 777xxx欧美| 亚洲国产精品t66y| 偷拍一区二区三区| 97久久人人超碰| 欧美狂野另类xxxxoooo| 日韩高清一区二区| 久久综合色综合88| 成人精品视频一区二区三区尤物| 久久网这里都是精品| 成a人片亚洲日本久久| 国产精品视频麻豆| 欧美在线视频全部完| 亚洲欧洲成人精品av97| 欧美丝袜丝nylons| 国产在线一区观看| 国产性色一区二区| 在线观看av一区二区| 久久成人久久鬼色| 亚洲一区二区三区影院| 国产亚洲一区二区三区在线观看| 欧美色图一区二区三区| 国产精品资源在线看| 亚洲一区二区视频在线| 国产精品久久久久久久久免费相片 | 亚洲国产视频a| 久久麻豆一区二区| 91 com成人网| 欧美精选午夜久久久乱码6080| 亚洲免费在线视频一区 二区| 日韩三级在线观看| 亚洲乱码国产乱码精品精98午夜| 美女被吸乳得到大胸91| 亚洲综合在线电影| 91精品福利视频| 国产精品91一区二区| 国产精品性做久久久久久| 欧美刺激脚交jootjob| 图片区小说区区亚洲影院| 久久久久88色偷偷免费| 狠狠色伊人亚洲综合成人| 26uuu欧美日本| 国产久卡久卡久卡久卡视频精品| 久久亚洲免费视频| 成人少妇影院yyyy| 免费看日韩精品| 五月婷婷综合在线| 久久精品久久精品| 国产一区二区三区蝌蚪| 东方欧美亚洲色图在线| 91亚洲大成网污www| 91成人在线免费观看| 欧美一区二区三区四区在线观看| 精品视频在线免费观看| 欧美日韩性生活| 欧美一级片在线| 精品国产自在久精品国产| 国产网站一区二区| 亚洲妇女屁股眼交7| 久久精品99国产精品| 成人免费看的视频| 欧美日韩国产在线观看| 久久久久久电影| 午夜不卡av在线| 白白色 亚洲乱淫| 2021中文字幕一区亚洲| 亚洲日本欧美天堂| 国产在线精品免费| 777午夜精品免费视频| 中文字幕国产精品一区二区| 午夜精品久久久久久久蜜桃app| 日本欧美一区二区在线观看| 色综合久久综合| 成人的网站免费观看| 成人免费的视频| 无吗不卡中文字幕| 成人美女在线视频| 91成人国产精品| 精品在线免费观看| 亚洲老司机在线| 亚洲精品一区在线观看| 欧美性猛片xxxx免费看久爱| 国产精品资源站在线| 日韩高清国产一区在线| 亚洲天堂精品视频| 久久久精品国产免大香伊| 91.麻豆视频| 日本在线播放一区二区三区| 欧美日韩一区国产| 亚洲一区在线视频观看| 日韩欧美中文一区二区| 亚洲一区av在线| 欧美肥妇毛茸茸| 美女一区二区久久| 久久亚洲综合色| 国产成人av一区二区| 国产片一区二区| 欧美中文字幕亚洲一区二区va在线| 国产精品国产三级国产a| 欧美伊人精品成人久久综合97 | 久草这里只有精品视频| 日韩欧美一区二区三区在线| 国产高清精品在线| 亚洲精品欧美二区三区中文字幕| 欧美色视频一区| 国产99久久久国产精品潘金网站| 国产人伦精品一区二区| 欧美熟乱第一页| 国产精品一区二区久久精品爱涩| 中文字幕制服丝袜成人av | 538在线一区二区精品国产| 日本亚洲免费观看| 日韩激情中文字幕| 久久久91精品国产一区二区精品| 一本大道久久a久久精二百| 欧美国产激情二区三区| 成人高清免费在线播放| 99视频精品免费视频| 久久蜜桃av一区二区天堂| 亚洲少妇30p| 久久亚洲精品小早川怜子| 亚洲精品在线观看视频| 久久你懂得1024| 久久美女高清视频| 国产精品美女久久久久久久久久久| 国产拍揄自揄精品视频麻豆| 中文字幕精品综合| 亚洲黄色片在线观看| 亚洲成人av在线电影| 日韩国产欧美一区二区三区| 成人免费一区二区三区视频| 亚洲女同ⅹxx女同tv| 亚洲国产成人午夜在线一区| 精品99一区二区| 久久亚洲影视婷婷| 中文av字幕一区| 亚洲男女毛片无遮挡| 亚洲乱码日产精品bd| 亚洲欧美另类图片小说| 亚洲五码中文字幕| 天堂在线亚洲视频| 男人的天堂亚洲一区| 国产一区二区主播在线| 国产精品一区二区三区99| 国产中文字幕精品| 91在线观看高清| 欧美视频一区二区三区在线观看 | 亚洲同性同志一二三专区| 久久女同精品一区二区| 亚洲欧美激情一区二区| 日韩高清在线观看| 国产一区啦啦啦在线观看| 91丨porny丨户外露出| 欧美日韩在线精品一区二区三区激情 | 成人免费一区二区三区视频| 蜜臀久久99精品久久久画质超高清| 亚洲成人激情自拍| 亚洲一区二区精品视频| 日一区二区三区| caoporn国产精品| 欧美一级一区二区| 成人黄页毛片网站| 国产白丝精品91爽爽久久| 亚洲欧美日韩一区| 亚洲激情自拍偷拍| 美腿丝袜亚洲综合| 91久久精品网| 国产欧美日韩激情| 日本成人在线一区| 99精品一区二区| 久久久久久久久久久久电影| 天天做天天摸天天爽国产一区| 懂色av一区二区在线播放| 在线不卡中文字幕| 悠悠色在线精品| 成人av免费在线播放| 久久久久久亚洲综合影院红桃| 中文字幕一区二区不卡| 麻豆一区二区在线| 日韩欧美的一区二区| 麻豆一区二区在线| 欧美成人一级视频| 久久爱另类一区二区小说| 日韩一二在线观看| 久久超碰97中文字幕| 欧美变态凌虐bdsm| 老汉av免费一区二区三区| 91精品在线观看入口| 丝袜a∨在线一区二区三区不卡| 99精品偷自拍| 五月婷婷激情综合网| 日韩免费观看2025年上映的电影| 免费成人性网站| 国产日韩av一区| 色综合一区二区| 日产精品久久久久久久性色| 欧美一三区三区四区免费在线看 | 中文字幕制服丝袜成人av| 成年人午夜久久久|