// The main goroutine. void runtime_main(void) { // Lock the main goroutine onto this, the main OS thread, // during initialization. Most programs won't care, but a few // do require certain calls to be made by the main thread. // Those can arrange for main.main to run in the main thread // by calling runtime.LockOSThread during initialization // to preserve the lock. runtime_LockOSThread(); runtime_sched.init = true; main_init(); runtime_sched.init = false; if(!runtime_sched.lockmain) runtime_UnlockOSThread(); // For gccgo we have to wait until after main is initialized // to enable GC, because initializing main registers the GC // roots. mstats.enablegc = 1; main_main(); runtime_exit(0); for(;;) *(int32*)0 = 0; }
// The main goroutine. void runtime_main(void) { // Lock the main goroutine onto this, the main OS thread, // during initialization. Most programs won't care, but a few // do require certain calls to be made by the main thread. // Those can arrange for main.main to run in the main thread // by calling runtime.LockOSThread during initialization // to preserve the lock. runtime_LockOSThread(); // From now on, newgoroutines may use non-main threads. setmcpumax(runtime_gomaxprocs); runtime_sched.init = true; scvg = __go_go(runtime_MHeap_Scavenger, nil); main_init(); runtime_sched.init = false; if(!runtime_sched.lockmain) runtime_UnlockOSThread(); // For gccgo we have to wait until after main is initialized // to enable GC, because initializing main registers the GC // roots. mstats.enablegc = 1; // The deadlock detection has false negatives. // Let scvg start up, to eliminate the false negative // for the trivial program func main() { select{} }. runtime_gosched(); main_main(); runtime_exit(0); for(;;) *(int32*)0 = 0; }
int main (int argc, char* argv[]) { BoxLib::Initialize(argc,argv); main_main(); BoxLib::Finalize(); return 0; }