示例#1
0
int thr_self()
{
  int i;
  thread_t tid;
  lwp_self(&tid);
  for(i=0;(i<MAXTHREAD)&&(thread_table[i].thread_key != tid.thread_key);i++);
  return(i);
}
示例#2
0
ldap_pvt_thread_t
ldap_pvt_thread_self( void )
{
	thread_t		mylwp;

	lwp_self( &mylwp );

	return mylwp;
}
示例#3
0
// Called to initialize a new m (including the bootstrap m).
// Called on the new thread, can not allocate memory.
void
runtime·minit(void)
{
	m->procid = runtime·lwp_self();

	// Initialize signal handling
	runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);
	runtime·sigprocmask(SIG_SETMASK, &sigset_none, nil);
}
示例#4
0
unsigned int
ldap_pvt_thread_sleep(
	unsigned int interval
)
{
	thread_t		mylwp;
	tl_t		*t, *nt;
	time_t		now;


	if ( lwp_self( &mylwp ) < 0 ) {
		return -1;
	}

	time( &now );

	mon_enter( &sglob->tsl_mon );

	if ( sglob->tsl_list != NULL ) {
		for ( t = sglob->tsl_list; t != NULL; t = t->tl_next ) {
			if ( SAMETHREAD( t->tl_tid, mylwp )) {
				/* We're already sleeping? */
				t->tl_wake = now + interval;
				mon_exit( &sglob->tsl_mon );
				lwp_suspend( mylwp );
				return 0;
			}
		}
	}

	nt = (tl_t *) LDAP_MALLOC( sizeof( tl_t ));

	if( nt == NULL ) return -1;

	nt->tl_next = sglob->tsl_list;
	nt->tl_wake = now + interval;
	nt->tl_tid = mylwp;
	sglob->tsl_list = nt;

	mon_exit( &sglob->tsl_mon );

	lwp_suspend( mylwp );
	return 0;
}
示例#5
0
void mthread_init( context *mainctx )
{
    int i;

    for(i=0;i<MAXTHREAD;i++)
      thread_table[i].thread_key = -1;
    lwp_self(&thread_table[0]);
    mutex_init(&mark_lock, USYNC_THREAD, 0);
    mutex_init(&p_mark_lock, USYNC_THREAD, 0);
    mutex_init(&alloc_lock, USYNC_THREAD, 0);
    mutex_init(&free_thread_lock, USYNC_THREAD, 0);
    mutex_init(&qthread_lock, USYNC_THREAD, 0);
    mutex_init(&qsort_lock, USYNC_THREAD, 0);
    sema_init(&free_thread_sem, 0, USYNC_THREAD, 0);
    rwlock_init(&gc_lock, USYNC_THREAD, 0);
    pod_setmaxpri(2);
    lwp_setstkcache(32*1024*4, MAXTHREAD);
    lwp_create((thread_t *)0, scheduler, 2, 0, lwp_newstk(), 0);
    lwp_setpri(SELF,MINPRIO);
}