gpt4 book ai didi

haskell - 鉴于我知道实际数字,如何构建 ThreadId?

转载 作者:行者123 更新时间:2023-12-04 17:00:16 24 4
gpt4 key购买 nike

我经常在 GHCi 中调试或玩耍时碰巧知道实际的 ThreadId数字(例如使用 Debug.Trace ),但这就是我所拥有的。

问题是所有线程API,比如killThread需要 ThreadId而不是 Int .

我试过 Hoogle,但结果是空的。有没有办法做到这一点?我最关心的是调试,所以我不介意它是一个讨厌的黑客还是通过一个 GHC-only 库。

最佳答案

你不能。 ThreadId是抽象的。 Int你实际上只是一个计数器( source ):

32  static StgThreadID next_thread_id = 1;
...
59 StgTSO *
60 createThread(Capability *cap, W_ size)
61 {
62 StgTSO *tso;
...
126 ACQUIRE_LOCK(&sched_mutex);
127 tso->id = next_thread_id++; // while we have the mutex
...
130 RELEASE_LOCK(&sched_mutex);
...
136 }
...
161 int
162 rts_getThreadId(StgPtr tso)
163 {
164 return ((StgTSO *)tso)->id;
165 }

它是 rts_getThreadIdThreadId 中被调用的 Show实例。没有映射回实际的 TSO。如果您想知道什么 ThreadId属于什么 Int ,您需要自己跟踪它们。例如,您可以解析 Int并填写 Map .

关于haskell - 鉴于我知道实际数字,如何构建 ThreadId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24995262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com