gpt4 book ai didi

c++ - 关于多线程程序的查询

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:51 25 4
gpt4 key购买 nike

这可能是一个简单的查询。

当我们创建线程时,我们将 (void *)t 作为参数传递给函数 PrintHello。我们正在复制指针 threadid 中的值(将其类型转换为 long)到 tid 中,这又是一个 long 变量。我对参数传递感到困惑。这是按引用传递还是按值传递。总的来说这是正确的吗?(值 *)t。它到底传递了什么值?

long t;
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);

void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;

请帮助我避免混淆:(

最佳答案

您所做的是按值传递。只要sizeof(T) <= sizeof(void*)就可以了对于类型 T你正试图通过。

如果不是这种情况,您应该创建一个 T在堆上,因为当创建的线程试图访问它时它可能超出范围:

T* t = new T(someValue);
rc = pthread_create(&threads[t], NULL, PrintHello, (void*)t);

关于c++ - 关于多线程程序的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1706188/

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