我想知道为什么我们不能通过值将对象传递给我们创建线程的函数。
它背后有合理的原因吗? 如果语言允许通过值传递会有害吗?
pthread
是一个C风格的界面。 为了比“传递整数”更灵活,它必须是一个指针。 void *
是在C中传递任意内容的最灵活方式。在C中,您当然可以通过值传递struct
,但是在编译时需要源和目标函数都知道哪个结构(并且相同)每一次,所以我们不能在我们的一个线程中使用struct X
,而在另一个线程中使用struct Y
)。
在C ++中,我们当然可以使用类和模板,几乎可以将任何内容传递给几乎任何类型的函数。
C ++ 11 std::thread
允许您使用各种C ++样式的东西来克服pthreads的“C-ness”(并且受制于目标系统的可用实现,使用没有pthread的线程)。
[这不是pthreads
独有的。 OS / 2和Windows线程实现都将void *
作为线程函数的参数]
POSIX线程是一个C API。 C不提供像复制构造函数这样的语言工具,因此无法在没有附加信息的情况下按值复制任何对象(即传入知道该类型的函数并且可以执行分配内存和复制数据的工作)。 但是,由于没有充分的理由,该API将过于复杂。
话虽如此,只要其大小不大于sizeof(void *)
,您就可以按值传递任何对象。
由于您已将问题标记为C ++,因此C ++允许通过可变参数模板传递具有任意数量参数的函数。 有关更多详细信息,请参阅std::thread
。
pthread_create
的参数被输入为指针,尽可能灵活,但这并不意味着你不能传递int
。 只需将其start_routine
为start_routine
的int
。 只要传递的值参数小于指针,就应该没问题。
以上就是c/c++开发分享pthread_create:按值传递参数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549513.html