我需要知道是否可以通过以下方式存储线程的私有数据。
pthread_create(&threads[i], NULL, student, (void *) i);
void *student(void *arg) {
int mybooks[3];
int mybooks_index = 0;
.......
}
这是可能的还是唯一的方法是在创建线程时将结构的指针作为参数发送?
答案 0 :(得分:3)
每个线程都有自己的堆栈。 mybooks
和mybooks_index
是自动变量,因此在堆栈上分配(即每个线程)。它们仅在student
退出时被解除分配。所以,是的,这将有效。如果你创建了它们static
,它们将在线程之间共享,而不是对线程私有。
答案 1 :(得分:2)
是。您使用student
的入口点生成的每个主题都将拥有自己的mybooks
和mybooks_index
副本。如@WhozCraig所述,它们是自动变量。
答案 2 :(得分:0)
将私有数据存储在这样的线程中是什么意思?您是否询问mybooks数组是否可以在"学生"功能?是的,它会。这是一个好习惯吗?取决于你想要完成的事情。我建议你为一本名为Book的书创建一个类。然后将Book对象类型传递给您在线程中调用的函数(在您的情况下为student())。