Mercurial > hg > CbC > CbC_gcc
view libgo/runtime/yield.c @ 133:420680fc7707
do normal call in goto codesegment in normal function
author | anatofuz |
---|---|
date | Sat, 03 Nov 2018 19:49:09 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include "config.h" #include <stddef.h> #include <sys/types.h> #include <sys/time.h> #include <sched.h> #include <unistd.h> #ifdef HAVE_SYS_SELECT_H #include <sys/select.h> #endif #if defined (__i386__) || defined (__x86_64__) #include <xmmintrin.h> #endif #include "runtime.h" /* Spin wait. */ void runtime_procyield (uint32 cnt) { volatile uint32 i; for (i = 0; i < cnt; ++i) { #if defined (__i386__) || defined (__x86_64__) _mm_pause (); #endif } } /* Ask the OS to reschedule this thread. */ void runtime_osyield(void) __attribute__ ((no_split_stack)); void runtime_osyield (void) { sched_yield (); } /* Sleep for some number of microseconds. */ void runtime_usleep (uint32 us) { struct timeval tv; tv.tv_sec = us / 1000000; tv.tv_usec = us % 1000000; select (0, NULL, NULL, NULL, &tv); }