1、
创建线程
pthread_create(&tid,NULL,thr_fun,"1");
sleep(1);
编译与执行:
编译:gcc 01.c -o 01 -lpthread
执行:./01
允许结果:
2、等待指定id线程结束
pthread_join(tid,&rval);
01.h
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void* thr_fun(void* arg){
char* no = (char*)arg;
int i=0;
for(;i<10;i++){
printf("%s thread,i:%d \n",no,i);
if(i==5){
//线程退出
pthread_exit(2);
}
}
return 1;
}
void main(){
printf("main thread\n");
//线程id
pthread_t tid;
pthread_create(&tid,NULL,thr_fun,"1");
//sleep(1);
void* rval;
//等待tid线程结束
pthread_join(tid,&rval);
printf("rval:%d \n",rval);
}
3、多线程操作同一数据引起的数据混乱
01.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int i=0;
void* thr_fun(void* arg){
char* no = (char*)arg;
for(;i<10;i++){
printf("%s thread,i:%d \n",no,i);
sleep(1);
}
i=0;
}
void main(){
pthread_t tid1, tid2;
pthread_create(&tid1,NULL,thr_fun,"No1");
pthread_create(&tid1,NULL,thr_fun,"No2");
//等待线程结束
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
}
运行后两个线程操作了相同的数据i
4、互斥锁
pthread_mutex_t mutex
01.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int i=0;
//互斥锁
pthread_mutex_t mutex;
void* thr_fun(void* arg){
//加锁
pthread_mutex_lock(&mutex);
char* no = (char*)arg;
for(;i<5;i++){
printf("%s thread,i:%d \n",no,i);
sleep(1);
}
i=0;
//解锁
pthread_mutex_unlock(&mutex);
}
void main(){
pthread_t tid1, tid2;
//初始化互斥锁
pthread_mutex_init(&mutex,NULL);
pthread_create(&tid1,NULL,thr_fun,"No1");
pthread_create(&tid2,NULL,thr_fun,"No2");
//等待线程结束
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
}
线程2运行完后线程1开始运行