mirror of
https://github.com/golang/go
synced 2024-09-15 14:10:17 +00:00
add runtime.GOMAXPROCS, allowing a program to, in effect, set $GOMAXPROCS
R=rsc DELTA=29 (28 added, 1 deleted, 0 changed) OCL=32829 CL=32837
This commit is contained in:
parent
ae3939cb78
commit
7955490de2
|
@ -40,3 +40,6 @@ func LockOSThread()
|
|||
// If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op.
|
||||
func UnlockOSThread()
|
||||
|
||||
// GOMAXPROCS sets the maximum number of CPUs that can be executing
|
||||
// simultaneously. This call will go away when the scheduler improves.
|
||||
func GOMAXPROCS(n int)
|
||||
|
|
|
@ -807,6 +807,29 @@ runtime·LockOSThread(void)
|
|||
g->lockedm = m;
|
||||
}
|
||||
|
||||
// delete when scheduler is stronger
|
||||
void
|
||||
runtime·GOMAXPROCS(int32 n)
|
||||
{
|
||||
if(n < 1)
|
||||
n = 1;
|
||||
|
||||
lock(&sched);
|
||||
sched.gomaxprocs = n;
|
||||
sched.mcpumax = n;
|
||||
// handle fewer procs
|
||||
while(sched.mcpu > sched.mcpumax) {
|
||||
noteclear(&sched.stopped);
|
||||
sched.waitstop = 1;
|
||||
unlock(&sched);
|
||||
notesleep(&sched.stopped);
|
||||
lock(&sched);
|
||||
}
|
||||
// handle more procs
|
||||
matchmg();
|
||||
unlock(&sched);
|
||||
}
|
||||
|
||||
void
|
||||
runtime·UnlockOSThread(void)
|
||||
{
|
||||
|
@ -821,4 +844,3 @@ runtime·mid(uint32 ret)
|
|||
ret = m->id;
|
||||
FLUSH(&ret);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ import (
|
|||
"flag";
|
||||
"fmt";
|
||||
"math";
|
||||
"runtime";
|
||||
)
|
||||
|
||||
var n = flag.Int("n", 2000, "count")
|
||||
|
@ -92,6 +93,7 @@ func (v Vec) ATimesTransp(u Vec) {
|
|||
|
||||
func main() {
|
||||
flag.Parse();
|
||||
runtime.GOMAXPROCS(*nCPU);
|
||||
N := *n;
|
||||
u := make(Vec, N);
|
||||
for i := 0; i < N; i++ {
|
||||
|
|
Loading…
Reference in a new issue