pthread
#include <pthread.h>
void threadRun()
{
printf("Thread Run ...");
return;
}
int main() {
pthread_t pt;
pthread_create(&pt, NULL, threadRun, NULL);
printf("End");
return 0;
}
pthread_create方法参数说明:
参数1:新创建的线程ID,指向内存地址;
参数2:线程的属性,默认为NULL
参数3:子线程运行的函数,函数的内存地址
参数4:参数3需要传入的参数,默认为空
int main(){
pthread_t pt;
pthread_create(&pt, NULL, threadRun, NULL);
pthread_join(&pt, NULL);
return 0;
}
pthread_join函数说明:
参数1:等待退出线程的线程号;
参数2:退出线程的返回值,可为空;
该函数会让主线程阻塞,直到对应的子线程都执行完毕后,再接着向下走。
int main() {
pthread_t pt;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&pt, &attr, threadRun, NULL);
return 0;
}
detach说明:
通过pthread_join()函数来使主线程阻塞等待其他线程退出,这样主线程可以清理其他线程的环境。但是还有一些线程,更喜欢自己来清理退出的状态,他们也不愿意主线程调用pthread_join来等待他们。我们将这一类线程的属性称为detached(分离的)。如果我们在调用 pthread_create()函数的时候将属性设置为NULL,则表明我们希望所创建的线程采用默认的属性,也就是jionable(此时不是detached)。
如果需要将线程的属性设置为detached,则按照上面创建线程的方法即可;
在线程设置joinable之后可以通过函数pthead_detach()将线程转为detached;相反则不行。调用pthread_join()之后调用则无任何效果。
// 获取当前线程的ID
pthread_self();
// 将joinable的线程调整为detach
pthread_detach(pthread_self());
// 直接结束线程
pthread_exit(NULL);
// 结束指定线程
pthread_cancel(&pt);
上面是常用线程函数