pthread_var.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
int var=100;
void* thr(void *arg)
{
printf("I am a thread! self=%lu,var=%d\n",pthread_self(),var);//var=1003
sleep(2);
var=1001;
printf("I am a thread! self=%lu,var=%d\n",pthread_self(),var);
return NULL;
}
int main()
{
pthread_t tid;
pthread_create(&tid,NULL,thr,NULL);
pthread_detach(tid); //线程分离
printf("I am a main thread! self=%lu,var=%d\n",pthread_self(),var);//var=100
var=1003;
sleep(5);
printf("I am a main thread! self=%lu,var=%d\n",pthread_self(),var);//var=1001
int ret=0;
if(ret=pthread_join(tid,NULL)>0){
printf("join err: %d,%s\n",ret,strerror(ret));
}
return 0;
}
pthread_equal函数
比较两个系统是否相等
线程id内部在进程内部唯一,进程外不一定
npthread.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
int var=100;
void* thr(void *arg)
{
int num=(int)arg;
printf("I am %d thread! self=%lu",num,pthread_self());
return (void*)(100+num);
}
int main()
{
pthread_t tid[5];
int i;
for(i=0;i<5;i++){
pthread_create(&tid[i],NULL,thr,(void*)i);
}
for(i=0;i<5;i++){
void *ret;
pthread_join(tid[i],&ret); //有序的原因
printf("i==%d,ret==%\n",i,(int)ret);
}
return 0;
}
进程属性控制
初始化线程属性
int pthread_attr_init(pthread_attr_t *attr);
销毁线程属性
int pthread_attr_destroy(pthread_attr_t *attr);
设置属性分离态
int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);
attr init初始化的属性
detachstate PTHREAD_CREATE_DETACHED线程分离
PTHREAD_CREATE_JOINABLE允许回收
pthread_attr.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
int var=100;
void* thr(void *arg)
{
printf("I am a thread! self=%lu",num,pthread_self());
return NULL;
}
int main()
{
pthread_attr_t attr;
pthread_attr_init(&attr); //初始化属性
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); // 设置属性分离
pthread_t tid;
pthread_create(&tid,&attr,thr,NULL);
int ret;
if(ret=pthread_join(tid,NULL)>0){
printf("join err: %d,%s\n",ret,strerror(ret));
}
pthread_attr_destroy(&attr); // 摧毁属性
return 0;
}
查看线程库版本
getconf GNU_LIBPTHREAD_VERSION