gpt4 book ai didi

c - 我无法让该线程正确显示其 ID

转载 作者:行者123 更新时间:2023-11-30 18:43:30 24 4
gpt4 key购买 nike

struct thread_info
{
int id;
pthread_t thread_id;
int thread_num;
int gpu;
};

struct thread_info *tinfo;

static void *GPUMon(void *userdata)
{
struct thread_info *mythr = userdata;
const int thread = mythr->id;

while(1)
{
printf("Thread: %d\n", thread);
Sleep(4000);
}

return NULL;
}

int main(void)
{
struct thread_info *thr;

tinfo = calloc(2, sizeof(*thr));
for(int ka = 0; ka < 2; ka++)
{

thr = &tinfo[ka];
thr->id = ka;

if (pthread_create(thr, NULL,GPUMon, thr))
{
return 0;
}
}

// some more code


return 0;
}

基本上,GPUMon 线程应该打印我的线程的 ID,即 thr->id = ka;但是我得到的是非常巨大的数字,例如

Thread: 7793336
Thread: 7792616

我不明白我做错了什么。

最佳答案

pthread_create() 将对 pthread_id 的引用作为其第一个参数。

因此(作为一个快速且肮脏的修复)我建议您将 struct thread_info 更改为:

struct thread_info
{
pthread_t thread_id;
int id;
int thread_num;
int gpu;
};

或者(更好)像这样调用pthread_create():

if (pthread_create(&thr->thread_id, NULL, GPUMon, thr))
{
return 0;
}

您的解决方案打印出的结果是由 pthread_create() 分配的 pthread_id 值(或者至少是其中的一部分,具体取决于您的平台),这些值被意外地当您传递指向错误结构的指针时,将其写入 struct thread_info 的成员 id

再说一遍:至少在开发时一定要打开所有编译器警告,因为(在这种情况下他们也会这样做)它们可以指出你的错误( gcc 选项 -Wall)

关于c - 我无法让该线程正确显示其 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202439/

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