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;
}