pthread 多线程编程_mutex 和 cond_t

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值