#if defined( HAVE_PTHREADS )
-#ifdef HAVE_DCE
+#ifndef HAVE_PTHREAD_KILL
/***********************************************************************
* *
* pthreads package with DCE - no mapping to do (except to create a *
{
kill( getpid(), sig );
}
-#endif /* DCE */
+#endif /* HAVE_PTHREAD_KILL */
#elif defined( HAVE_MACH_CTHREADS )
}
void
-pthread_yield()
+pthread_yield( void )
{
cthread_yield();
}
return( 0 );
}
-#elif defined( HAVE_LWP_THR )
+#elif defined( HAVE_THR )
/*******************
* *
* *
*******************/
-#if !defined(__SunOS_5_6)
int
pthread_attr_init( pthread_attr_t *attr )
{
{
return( thr_create( NULL, 0, func, arg, *attr, tid ) );
}
-#endif /* ! sunos56 */
void
-pthread_yield()
+pthread_yield( void )
{
thr_yield();
}
-#if !defined(__SunOS_5_6)
void
pthread_exit()
{
{
return( cond_broadcast( cv ) );
}
-#endif /* ! sunos56 */
#elif defined( HAVE_LWP )
* *
*************/
-extern stkalign_t *get_stack();
-static void lwp_create_stack();
-
int
pthread_attr_init( pthread_attr_t *attr )
{
return( 0 );
}
+static void
+lwp_create_stack( VFP func, void *arg, int stackno )
+{
+ (*func)( arg );
+
+ free_stack( stackno );
+}
+
/* ARGSUSED */
int
pthread_create(
arg, stackno ) );
}
-static void
-lwp_create_stack( VFP func, void *arg, int stackno )
-{
- (*func)( arg );
-
- free_stack( stackno );
-}
-
void
-pthread_yield()
+pthread_yield( void )
{
lwp_yield( SELF );
}
}
+#elif defined( HAVE_NT_MULTITHREADS )
+
+#include <process.h>
+#include <winsock2.h>
+
+int
+pthread_attr_init( pthread_attr_t *attr )
+{
+ *attr = 0;
+ return( 0 );
+}
+
+int
+pthread_attr_destroy( pthread_attr_t *attr )
+{
+ return( 0 );
+}
+
+int
+pthread_attr_getdetachstate( pthread_attr_t *attr, int *detachstate )
+{
+ *detachstate = *attr;
+ return( 0 );
+}
+
+int
+pthread_attr_setdetachstate( pthread_attr_t *attr, int detachstate )
+{
+ *attr = detachstate;
+ return( 0 );
+}
+
+int
+pthread_create(
+ pthread_t *tid,
+ pthread_attr_t *attr,
+ VFP func,
+ void *arg
+)
+{
+ *tid = (pthread_t)_beginthread( (void *) func, 0, arg );
+ return ( (unsigned long)*tid == -1 ? -1 : 0 );
+}
+
+void
+pthread_yield()
+{
+
+}
+
+void
+pthread_exit( void )
+{
+ _endthread( );
+}
+
+void
+pthread_join( pthread_t tid, int *pStatus )
+{
+ DWORD status;
+ status = WaitForSingleObject( tid, INFINITE );
+ if ( pStatus != NULL)
+ {
+ if ( status != WAIT_FAILED )
+ *pStatus = 0;
+ else
+ *pStatus = WAIT_ABANDONED;
+ }
+}
+
+
+void
+pthread_kill( pthread_t tid, int sig )
+{
+ return;
+}
+
+
+int
+pthread_mutex_init( pthread_mutex_t *mp, pthread_mutexattr_t *attr )
+{
+ *mp = CreateMutex( NULL, 0, NULL );
+ return ( 0 );
+}
+
+int
+pthread_mutex_destroy( pthread_mutex_t *mp )
+{
+ CloseHandle( *mp );
+ return ( 0 );
+}
+
+int
+pthread_mutex_lock( pthread_mutex_t *mp )
+{
+ WaitForSingleObject( *mp, INFINITE );
+ return ( 0 );
+}
+
+int
+pthread_mutex_unlock( pthread_mutex_t *mp )
+{
+ ReleaseMutex( *mp );
+ return ( 0 );
+}
+
+int
+pthread_mutex_trylock( pthread_mutex_t *mp )
+{
+ DWORD status;
+
+ status = WaitForSingleObject( *mp, 0 );
+ if ( (status == WAIT_FAILED) || (status == WAIT_TIMEOUT) )
+ return 0;
+ else
+ return 1;
+}
+
+int
+pthread_cond_init( pthread_cond_t *cv, pthread_condattr_t *attr )
+{
+ *cv = CreateEvent( NULL, FALSE, FALSE, NULL );
+ return( 0 );
+}
+
+int
+pthread_cond_destroy( pthread_cond_t *cv )
+{
+ CloseHandle( *cv );
+ return( 0 );
+}
+
+int
+pthread_cond_wait( pthread_cond_t *cv, pthread_mutex_t *mp )
+{
+ ReleaseMutex( *mp );
+ WaitForSingleObject( *cv, INFINITE );
+ WaitForSingleObject( *mp, INFINITE );
+ return( 0 );
+}
+
+int
+pthread_cond_signal( pthread_cond_t *cv )
+{
+ SetEvent( *cv );
+ return( 0 );
+}
+
+int
+pthread_cond_broadcast( pthread_cond_t *cv )
+{
+ SetEvent( *cv );
+ return( 0 );
+}
+
#else
/***********************************************************************
}
void
-pthread_yield()
+pthread_yield( void )
{
return;
}