Denver Toha Asked:2022-07-16 21:39:31 +0000 UTC2022-07-16 21:39:31 +0000 UTC 2022-07-16 21:39:31 +0000 UTC 如何找出goroutine当前正在执行的线程的id? 772 如何找出goroutine当前正在执行的线程的id? golang 1 个回答 Voted Best Answer Pak Uula 2022-07-17T15:07:08Z2022-07-17T15:07:08Z 首先,您需要确定您所称的线程 ID。中有一个ID pthreads,Linux内核中有一个线程ID,Windows内核中有一个线程ID。 在任何情况下,您都需要调用相应的 Cish 函数。例如,在 Linux 中有一个系统调用 this gettid。Golang在. _ syscall因此,下面是一个打印main数百个衍生 goroutine 的 Linux 线程 ID 的程序示例: package main import ( "fmt" "sync" "syscall" ) func print_thread_id(info string, wg *sync.WaitGroup) { tid := syscall.Gettid() fmt.Printf("%s: Thread ID: %v\n", info, tid) if wg != nil { wg.Done() } } func main() { print_thread_id("main", nil) var wg sync.WaitGroup for i := 0; i < 100; i++ { wg.Add(1) go print_thread_id(fmt.Sprintf("goroutine %d", i+1), &wg) } wg.Wait() } 她的结论是这样的: main: Thread ID: 2804 goroutine 2: Thread ID: 2806 goroutine 5: Thread ID: 2806 goroutine 4: Thread ID: 2806 goroutine 7: Thread ID: 2806 goroutine 1: Thread ID: 2808 goroutine 10: Thread ID: 2808 ... goroutine 83: Thread ID: 2807 goroutine 46: Thread ID: 2807 goroutine 88: Thread ID: 2816 goroutine 93: Thread ID: 2809 goroutine 98: Thread ID: 2804 goroutine 84: Thread ID: 2807 goroutine 99: Thread ID: 2816 goroutine 94: Thread ID: 2806
首先,您需要确定您所称的线程 ID。中有一个ID
pthreads,Linux内核中有一个线程ID,Windows内核中有一个线程ID。在任何情况下,您都需要调用相应的 Cish 函数。例如,在 Linux 中有一个系统调用 this
gettid。Golang在. _syscall因此,下面是一个打印main数百个衍生 goroutine 的 Linux 线程 ID 的程序示例:她的结论是这样的: