分类: 系统运维
2012-03-31 22:16:59
正如每个进程有一个进程ID,每个线程也有一个线程ID。不像在系统唯一的进程ID,线程ID只在它所属的进程上下文里是有意义的。
回想下一个进程ID,由pid_t数据类型表示,是一个非负整数。一个线程ID由pthread_t数据类型表示。实现可以使用一个结构体来表示pthread_t数据类型,所以可移植的实现不能把它们当成是整型。因此,一个函数被用来比较两个线程ID。
Linux使用一个无符号长整型来表示pthread_t数据类型。Solaris用一个无符号整型表示。FreeBSD和Mac OS X用一个指向pthread结构体的指针表示。
允许pthread_t为一个结构体的一个后果是没有可移植的方法来打印它的值。有时,在程序调试时打印线程ID很重要,但是其它时候通常不需要这样做。最坏时,这导致不可移植的调试代码,所以它没有很多限制。
这 个函数可以和pthread_equal一起使用,当一个线程需要识别由它的线程ID标签的数据结构时。例如,一个主线程可以把工作分配放到一个队列里, 并使用线程ID来控制每个线程的工作。单个主线程把新的工作放到一个工作队列里。三个工作线程的线程池从队列删除工作。主线程通过在应该处理的每个工作里 放置线程ID来控制工作分配,而不是让每个线程处理任何在队列头的工作。每个工作线程然后只删除标签为它自己的线程ID的工程。