pthread 多线程编程_mutex 和 cond_t

来源:互联网 发布:linux write 编辑:程序博客网 时间:2024/06/05 20:08

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




原创粉丝点击