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

📄 mutex.ac

📁 这是国外的resip协议栈
💻 AC
📖 第 1 页 / 共 2 页
字号:
# $Id: mutex.ac,v 11.46 2004/07/09 16:23:19 bostic Exp $# POSIX pthreads tests: inter-process safe and intra-process only.AC_DEFUN(AM_PTHREADS_SHARED, [AC_TRY_RUN([#include <pthread.h>main() {	pthread_cond_t cond;	pthread_mutex_t mutex;	pthread_condattr_t condattr;	pthread_mutexattr_t mutexattr;	exit (	pthread_condattr_init(&condattr) ||	pthread_condattr_setpshared(&condattr, PTHREAD_PROCESS_SHARED) ||	pthread_mutexattr_init(&mutexattr) ||	pthread_mutexattr_setpshared(&mutexattr, PTHREAD_PROCESS_SHARED) ||	pthread_cond_init(&cond, &condattr) ||	pthread_mutex_init(&mutex, &mutexattr) ||	pthread_mutex_lock(&mutex) ||	pthread_mutex_unlock(&mutex) ||	pthread_mutex_destroy(&mutex) ||	pthread_cond_destroy(&cond) ||	pthread_condattr_destroy(&condattr) ||	pthread_mutexattr_destroy(&mutexattr));}], [db_cv_mutex="$1"],,AC_TRY_LINK([#include <pthread.h>],[	pthread_cond_t cond;	pthread_mutex_t mutex;	pthread_condattr_t condattr;	pthread_mutexattr_t mutexattr;	exit (	pthread_condattr_init(&condattr) ||	pthread_condattr_setpshared(&condattr, PTHREAD_PROCESS_SHARED) ||	pthread_mutexattr_init(&mutexattr) ||	pthread_mutexattr_setpshared(&mutexattr, PTHREAD_PROCESS_SHARED) ||	pthread_cond_init(&cond, &condattr) ||	pthread_mutex_init(&mutex, &mutexattr) ||	pthread_mutex_lock(&mutex) ||	pthread_mutex_unlock(&mutex) ||	pthread_mutex_destroy(&mutex) ||	pthread_cond_destroy(&cond) ||	pthread_condattr_destroy(&condattr) ||	pthread_mutexattr_destroy(&mutexattr));], [db_cv_mutex="$1"]))])AC_DEFUN(AM_PTHREADS_PRIVATE, [AC_TRY_RUN([#include <pthread.h>main() {	pthread_cond_t cond;	pthread_mutex_t mutex;	pthread_condattr_t condattr;	pthread_mutexattr_t mutexattr;	exit (	pthread_condattr_init(&condattr) ||	pthread_mutexattr_init(&mutexattr) ||	pthread_cond_init(&cond, &condattr) ||	pthread_mutex_init(&mutex, &mutexattr) ||	pthread_mutex_lock(&mutex) ||	pthread_mutex_unlock(&mutex) ||	pthread_mutex_destroy(&mutex) ||	pthread_cond_destroy(&cond) ||	pthread_condattr_destroy(&condattr) ||	pthread_mutexattr_destroy(&mutexattr));}], [db_cv_mutex="$1"],,AC_TRY_LINK([#include <pthread.h>],[	pthread_cond_t cond;	pthread_mutex_t mutex;	pthread_condattr_t condattr;	pthread_mutexattr_t mutexattr;	exit (	pthread_condattr_init(&condattr) ||	pthread_mutexattr_init(&mutexattr) ||	pthread_cond_init(&cond, &condattr) ||	pthread_mutex_init(&mutex, &mutexattr) ||	pthread_mutex_lock(&mutex) ||	pthread_mutex_unlock(&mutex) ||	pthread_mutex_destroy(&mutex) ||	pthread_cond_destroy(&cond) ||	pthread_condattr_destroy(&condattr) ||	pthread_mutexattr_destroy(&mutexattr));], [db_cv_mutex="$1"]))])# Figure out mutexes for this compiler/architecture.AC_DEFUN(AM_DEFINE_MUTEXES, [# Mutexes we don't test for, but want the #defines to exist for# other ports.AH_TEMPLATE(HAVE_MUTEX_VMS, [Define to 1 to use VMS mutexes.])AH_TEMPLATE(HAVE_MUTEX_VXWORKS, [Define to 1 to use VxWorks mutexes.])AC_CACHE_CHECK([for mutexes], db_cv_mutex, [db_cv_mutex=noorig_libs=$LIBS# User-specified POSIX or UI mutexes.## There are two different reasons to specify mutexes: First, the application# is already using one type of mutex and doesn't want to mix-and-match (for# example, on Solaris, which has POSIX, UI and LWP mutexes).  Second, the# applications POSIX pthreads mutexes don't support inter-process locking,# but the application wants to use them anyway (for example, some Linux and# *BSD systems).## Test for LWP threads before testing for UI/POSIX threads, we prefer them# on Solaris.  There's a bug in SunOS 5.7 where applications get pwrite, not# pwrite64, if they load the C library before the appropriate threads library,# e.g., tclsh using dlopen to load the DB library.  By using LWP threads we# avoid answering lots of user questions, not to mention the bugs.## Otherwise, test for POSIX threads before UI threads.  There are Linux systems# that support a UI compatibility mode, and applications are more likely to be# written for POSIX threads than UI threads.## Try and link with a threads library if possible.  The problem is the Solaris# C library has UI/POSIX interface stubs, but they're broken, configuring them# for inter-process mutexes doesn't return an error, but it doesn't work either.if test "$db_cv_posixmutexes" = yes; then	db_cv_mutex="posix_only";fiif test "$db_cv_uimutexes" = yes; then	db_cv_mutex="ui_only";fi# User-specified Win32 mutexes (MinGW build)if test "$db_cv_mingw" = "yes"; then	db_cv_mutex=win32/gccfi# LWP threads: _lwp_XXXif test "$db_cv_mutex" = no; thenAC_TRY_LINK([#include <synch.h>],[	static lwp_mutex_t mi = SHAREDMUTEX;	static lwp_cond_t ci = SHAREDCV;	lwp_mutex_t mutex = mi;	lwp_cond_t cond = ci;	exit (	_lwp_mutex_lock(&mutex) ||	_lwp_mutex_unlock(&mutex));], [db_cv_mutex="Solaris/lwp"])fi# POSIX.1 pthreads: pthread_XXX## If the user specified we use POSIX pthreads mutexes, and we fail to find the# full interface, try and configure for just intra-process support.if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then	LIBS="$LIBS -lpthread"	AM_PTHREADS_SHARED("POSIX/pthreads/library")	LIBS="$orig_libs"fiif test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then	AM_PTHREADS_SHARED("POSIX/pthreads")fiif test "$db_cv_mutex" = "posix_only"; then	AM_PTHREADS_PRIVATE("POSIX/pthreads/private")fiif test "$db_cv_mutex" = "posix_only"; then	LIBS="$LIBS -lpthread"	AM_PTHREADS_PRIVATE("POSIX/pthreads/library/private")	LIBS="$orig_libs"fiif test "$db_cv_mutex" = "posix_only"; then	AC_MSG_ERROR([unable to find POSIX 1003.1 mutex interfaces])fi# UI threads: thr_XXXif test "$db_cv_mutex" = no -o "$db_cv_mutex" = "ui_only"; thenLIBS="$LIBS -lthread"AC_TRY_LINK([#include <thread.h>#include <synch.h>],[	mutex_t mutex;	cond_t cond;	int type = USYNC_PROCESS;	exit (	mutex_init(&mutex, type, NULL) ||	cond_init(&cond, type, NULL) ||	mutex_lock(&mutex) ||	mutex_unlock(&mutex));], [db_cv_mutex="UI/threads/library"])LIBS="$orig_libs"fiif test "$db_cv_mutex" = no -o "$db_cv_mutex" = "ui_only"; thenAC_TRY_LINK([#include <thread.h>#include <synch.h>],[	mutex_t mutex;	cond_t cond;	int type = USYNC_PROCESS;	exit (	mutex_init(&mutex, type, NULL) ||	cond_init(&cond, type, NULL) ||	mutex_lock(&mutex) ||	mutex_unlock(&mutex));], [db_cv_mutex="UI/threads"])fiif test "$db_cv_mutex" = "ui_only"; then	AC_MSG_ERROR([unable to find UI mutex interfaces])fi# msemaphore: HPPA only# Try HPPA before general msem test, it needs special alignment.if test "$db_cv_mutex" = no; thenAC_TRY_LINK([#include <sys/mman.h>],[#if defined(__hppa)	typedef msemaphore tsl_t;	msemaphore x;	msem_init(&x, 0);	msem_lock(&x, 0);	msem_unlock(&x, 0);	exit(0);#else	FAIL TO COMPILE/LINK#endif], [db_cv_mutex="HP/msem_init"])fi# msemaphore: AIX, OSF/1if test "$db_cv_mutex" = no; thenAC_TRY_LINK([#include <sys/types.h>#include <sys/mman.h>],[	typedef msemaphore tsl_t;	msemaphore x;	msem_init(&x, 0);	msem_lock(&x, 0);	msem_unlock(&x, 0);	exit(0);], [db_cv_mutex="UNIX/msem_init"])fi# ReliantUNIXif test "$db_cv_mutex" = no; thenLIBS="$LIBS -lmproc"AC_TRY_LINK([#include <ulocks.h>],[	typedef spinlock_t tsl_t;	spinlock_t x;	initspin(&x, 1);	cspinlock(&x);	spinunlock(&x);], [db_cv_mutex="ReliantUNIX/initspin"])LIBS="$orig_libs"fi# SCO: UnixWare has threads in libthread, but OpenServer doesn't.if test "$db_cv_mutex" = no; thenAC_TRY_COMPILE(,[#if defined(__USLC__)	exit(0);#else	FAIL TO COMPILE/LINK#endif], [db_cv_mutex="SCO/x86/cc-assembly"])fi# abilock_t: SGIif test "$db_cv_mutex" = no; thenAC_TRY_LINK([#include <abi_mutex.h>],[	typedef abilock_t tsl_t;	abilock_t x;	init_lock(&x);	acquire_lock(&x);	release_lock(&x);], [db_cv_mutex="SGI/init_lock"])fi# sema_t: Solaris# The sema_XXX calls do not work on Solaris 5.5.  I see no reason to ever# turn this test on, unless we find some other platform that uses the old# POSIX.1 interfaces.  (I plan to move directly to pthreads on Solaris.)if test "$db_cv_mutex" = DOESNT_WORK; thenAC_TRY_LINK([#include <synch.h>],[	typedef sema_t tsl_t;	sema_t x;	sema_init(&x, 1, USYNC_PROCESS, NULL);	sema_wait(&x);	sema_post(&x);], [db_cv_mutex="UNIX/sema_init"])fi# _lock_try/_lock_clear: Solaris# On Solaris systems without Pthread or UI mutex interfaces, DB uses the# undocumented _lock_try _lock_clear function calls instead of either the# sema_trywait(3T) or sema_wait(3T) function calls.  This is because of# problems in those interfaces in some releases of the Solaris C library.if test "$db_cv_mutex" = no; thenAC_TRY_LINK([#include <sys/machlock.h>],[	typedef lock_t tsl_t;	lock_t x;	_lock_try(&x);	_lock_clear(&x);], [db_cv_mutex="Solaris/_lock_try"])fi# _check_lock/_clear_lock: AIXif test "$db_cv_mutex" = no; thenAC_TRY_LINK([#include <sys/atomic_op.h>],[	int x;	_check_lock(&x,0,1);	_clear_lock(&x,0);], [db_cv_mutex="AIX/_check_lock"])fi# _spin_lock_try/_spin_unlock: Apple/Darwinif test "$db_cv_mutex" = no; thenAC_TRY_LINK(,[	int x;	_spin_lock_try(&x);

⌨️ 快捷键说明

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