gpt4 book ai didi

c - 如何知道哪个线程正在执行一个函数?

转载 作者:行者123 更新时间:2023-12-05 09:10:28 26 4
gpt4 key购买 nike

所以我有一个在 c 中使用 pthreads 的电梯程序的缩小版本。每个线程都是调用函数 request() 的单独电梯。我不确定如何知道哪个电梯(1、2 或 3)是线程正在使用函数请求。在请求函数中,我需要打印当时使用它的线程。抱歉,如果我的解释不完整。

void* request(void* abc)
{
int ii;
for(ii = 0; ii < 8; ii++)
{
sleep(1);
printf("REQUEST FROM LIFT COMPLETED\n");
}
}
int main()
{
pthread_t lift1;
pthread_t lift2;
pthread_t lift3;

pthread_create(&lift1, NULL, request, NULL);
pthread_create(&lift2, NULL, request, NULL);
pthread_create(&lift3, NULL, request, NULL);

pthread_join(lift1, NULL);
pthread_join(lift1, NULL);
pthread_join(lift1, NULL);

return 0;
}

最佳答案

您可以通过多种方式做到这一点,最简单的一种是传递一些有意义的值作为线程参数来标识每个线程。

这是一个例子:

void *request(void *data)
{
const int id = *(const int *)data;
int ii;

for(ii = 0; ii < 8; ii++)
{
sleep(1);
printf("REQUEST FROM LIFT %d COMPLETED\n", id);
}
}

int main()
{
const int id1 = 1, id2 = 2, id3 = 3;
pthread_t lift1;
pthread_t lift2;
pthread_t lift3;

pthread_create(&lift1, NULL, request, (void *)&id1);
pthread_create(&lift2, NULL, request, (void *)&id2);
pthread_create(&lift3, NULL, request, (void *)&id3);

pthread_join(lift1, NULL);
pthread_join(lift2, NULL);
pthread_join(lift3, NULL);

return 0;
}

您还可以将那些 id 变量定义为 static 全局变量:

// Outside main:
static const int id1 = 1, id2 = 2, id3 = 3;

关于c - 如何知道哪个线程正在执行一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61410449/

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