2016/05/24
7,198
1 线程标识
每个线程都有一个唯一标识:线程ID. 线程ID用 pthread_t 数据类型来表示,该结构体在不同的系统上有不同的实现,某些操作系统将其实现为 unsigned long ,某些操作系统将其实现为结构体。所有可移植代码中不可以对其直接比较,必须使用一个函数来对两个线程ID进行比较。
1 2 |
//返回值:若相等,则为非0;否则,返回0 int pthread_equl(pthread_t t1, pthread_t t2); |
不同的实现方式带来的影响就是,不能使用一种可移植的方式来打印该数据类型的值。
获取当前线程:
1 2 3 4 5 |
//Unix pthread_t pthread_self(void); //Windows HANDLE GetCurrentThread(void); |
2 线程创建
新增的线程可以通过调用pthread_create 函数来创建
1 2 3 4 5 |
#include <pthread.h> //thread: 当成功时,指向新增线程的内存单元 //返回值:若成功,则返回0;否则 返回错误编号 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); |
新创建的线程从 start_routine 函数的地址开始运行。该函数有一个 void* 类型的指针做为参数。如果函数需要多个参数,需要将参数做为结构体,然后将结构体地址做为参数传入。 创建线程时并不能保证新增线程优先于其它线程先运行,这依赖于操作系统的线程实现与调度算法。