1、 引用头文件#include <pthread.h>
2、 线程创建:
int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
若成功则返回0,否则返回出错编号
第一个参数为指向线程标识符的指针
第二个参数用来设置线程属性(通常为空)
第三个参数是线程运行函数的起始地址
第四个参数是运行函数的参数
3.、线程终止
如果进程中任何一个线程调用exit或_exit, 整个进程都会终止
方法:1)、return 返回
2)、终止函数:
void pthread_exit(void *rval_ptr): Rval_ptr:线程退出返回值得指针
int pthread_cancel(pthread_t thread); 参数是要取消目标线程的ID
4、 线程等待
int pthread_join(pthread_t tid, void **rval_ptr)
功能:阻塞调用线程,知道指定的线程终止,Tid:等待退出的线程id,Rval_ptr:线程退出返回值得指针
5、 线程标识
pthread_t pthread_self(void), 获取调用线程的thread identifier
6.、互斥量
初始化:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
加锁: pthread_mutex_lock(&mutex);
去锁:pthread_mutex_unlock(&mutex);
销毁锁:pthread_mutex_unlock(&mutex);
7、条件变量
初始化: pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
唤醒线程: pthread_cond_signal(&cond);
睡眠等待:pthread_cond_wait(&cond,&mutex);
销毁: pthread_cond_wait(&cond,&mutex)
pthread_cond_wait 和 pthread_mutex_lock一起使用,先pthread_mutex_lock,然后pthread_cond_wait内部会自动解锁,然后进入等待,这样其他线程就可以继续获得锁了。
#include <pthread.h> #include <stdio.h> #include <stdlib.h> int i = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void *thread1(void *); int main() { pthread_t tid; pthread_create(&tid,NULL,thread1,(void *)NULL); pthread_mutex_lock(&mutex); while(i < 100) { pthread_cond_wait(&cond, &mutex); } printf("i=%d\n",i); pthread_mutex_unlock(&mutex); pthread_join(tid, NULL); pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); return 0; } void *thread1(void *junk) { while(1) { pthread_mutex_lock(&mutex); if(i < 200) { i++; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); } else { pthread_mutex_unlock(&mutex); break; } } return NULL; }