github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/runtime/proc.go (about)

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package runtime
     6  
     7  // Gosched はプロセッサを譲り、他のゴルーチンが実行されるようにします。現在のゴルーチンは一時停止されませんが、実行は自動的に再開されます。
     8  //
     9  //go:nosplit
    10  func Gosched()
    11  
    12  // ブレークポイントはブレークポイントトラップを実行します。
    13  func Breakpoint()
    14  
    15  // LockOSThreadは呼び出し側のゴルーチンを現在のオペレーティングシステムスレッドに接続します。
    16  // 呼び出し側のゴルーチンは常にそのスレッドで実行され、他のゴルーチンは実行されません。
    17  // それまでのLockOSThreadへの呼び出し回数と同じ数だけ、[UnlockOSThread] への呼び出しを行うまで、呼び出し側のゴルーチン以外は実行されません。
    18  // 呼び出し側のゴルーチンがスレッドのロックを解除せずに終了すると、スレッドは終了します。
    19  //
    20  // すべてのinit関数は起動時のスレッド上で実行されます。init関数からLockOSThreadを呼び出すと、main関数がそのスレッド上で呼び出されます。
    21  //
    22  // ゴルーチンは、スレッドごとの状態に依存するOSサービスや非Goライブラリ関数を呼び出す前に、LockOSThreadを呼び出す必要があります。
    23  //
    24  //go:nosplit
    25  func LockOSThread()
    26  
    27  // UnlockOSThreadは、以前のLockOSThread呼び出しを取り消します。
    28  // 呼び出し元のゴルーチンのアクティブなLockOSThread呼び出し数がゼロになると、
    29  // 呼び出し元のゴルーチンは固定されたオペレーティングシステムスレッドからの接続が解除されます。
    30  // アクティブなLockOSThread呼び出しがない場合、これは無効操作です。
    31  //
    32  // UnlockOSThreadを呼び出す前に、呼び出し元は他のゴルーチンを実行するためにOSスレッドが適していることを確認する必要があります。
    33  // 呼び出し元が他のゴルーチンに影響を与えるスレッドの状態に対して恒久的な変更を行った場合、
    34  // この関数を呼び出さずにゴルーチンをOSスレッドにロックしたままにしておくべきです。
    35  //
    36  //go:nosplit
    37  func UnlockOSThread()