我对linux中的pthreads有一些疑问:
pthread_t
是一种类似于int
和char
的数据类型,表明我们正在定义一个帖子吗?pthread_t thread1
,还是等到pthread_create()
调用之后? pthread_create()
来电中传递多个参数吗?如果是这样,怎么样?我脑子里有很多这样的事情。也请随时建议任何好的网站或文件阅读。
答案 0 :(得分:9)
逐个回答问题,但不一定按照相同的顺序:
pthread_t
是一种类似于int
或char
的数据类型,表示我们正在定义一个帖子吗?编译器是在该句子之后立即将内存分配给pthread_t thread1
还是等到找到pthread_create()
调用
pthread_t
是一种类似于int
的类型,它是在您定义它时创建的,而不是在您调用pthread_create
时创建的。在摘录中:
pthread_t tid;
int x = pthread_create (&tid, blah, blah, blah);
它是创建变量的第一个行,但在从pthread_create
返回之前它没有任何用处。
pthread_t
占用多少大小,2个字节或4个字节?
你不应该关心它需要多少空间,而不是你应该关心FILE
结构占用多少空间。您应该按预期使用该结构。如果真的想知道,那么sizeof
就是你的朋友。
有关如何设置线程属性的任何好信息?
如果要使用默认属性以外的任何其他内容,则必须先创建属性变量,然后将其传递给pthread_create
调用。
我们只能将pthread_create
函数中的一个参数传递给函数吗?我们不能在pthread_create()
函数中向被调用的线程发送2或3个参数吗?
虽然你只允许将一个额外参数传递给线程,但没有什么可以阻止你将这个参数作为指向一个容纳一百个不同东西的结构的指针。
如果您正在寻找有关如何使用pthreads的信息,Google搜索结束时会有很多内容,但我仍然更喜欢死树版本:
答案 1 :(得分:2)
需要多大的尺寸
pthread_t
使用sizeof pthread_t
字节。
我们只能将pthread_create中的一个参数传递给函数不超过一个?我们不能在pthread_create()函数中将2或3个参数发送到被调用的线程?
你需要的只是一个论点。你得到的只是一个论点。它是void *
,因此您可以将指针传递给您想要的任何内容。例如包含多个值的结构。
我脑子里有很多东西,比如建议阅读好的网站或文件
查看pthread
手册页,online或您选择的shell(man pthread
,man pthread_create
等)。我开始阅读一些basic lecture slides(这里是the sequel)。
答案 2 :(得分:1)
pthread_t
可以是任何个字节数。它可以是char,int,指针或结构......但你既不需要知道也不需要关心。如果您需要用于分配目的的大小,请使用sizeof(pthread_t)
。您可以将其分配给的唯一变量类型是另一个pthread_t
。
在定义pthread_t
时,编译器可能会也可能不会分配与线程关联的资源。同样,您不需要知道也不需要关心,因为您需要在您创建的任何线程上调用pthread_join
(或pthread_detach
)。只要遵守规则,系统就会确保它不会泄漏内存(或任何其他资源)。
属性无疑是有点笨拙的。它们保存在pthread_attr_t
对象中,该对象也可以表示为整数,指针或整个结构。您必须使用pthread_attr_init
对其进行初始化,然后使用pthread_attr_destroy
将其销毁。在这两者之间,您使用各种pthread_attr_...
调用来设置或清除属性,然后您可以将其作为一个或多个pthread_create
调用的一部分传递,以设置新线程的属性。
不同的实现可以并且将以不同的方式处理所有这些事情。
答案 3 :(得分:0)
查看pthread.h
文件以获取更多信息。在我的系统上,pthread_t
被定义为unsigned long int
。但我想这是依赖于平台的,因为它被定义为bits/pthreadtype.h
。