线程的内存问题、线程结束、线程回收、获取线程号
线程发信号pthread_cancel
线程分离态
互斥锁:
无名信号量
条件信号
#include <myhead.h>
//定义一个条件变量
pthread_cond_t cond;
//定义一个互斥锁
pthread_mutex_t mutex;
//定义生产者线程
void* task1(void* arg)
{
while(1)
{
sleep(1);
printf("i make a car\n");
//将生产的资源告诉队列中第一个消费者
//pthread_cond_signal(&cond);
//将生产的资源告诉所有消费者
pthread_cond_broadcast(&cond);
}
}
//定义消费者线程
void* task2(void *arg)
{
while(1)
{
sleep(1);
//上锁
pthread_mutex_lock(&mutex);
//接受生产者的信号
pthread_cond_wait(&cond,&mutex);
printf("%#lo:i buy a car\n",pthread_self());
//解锁
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, const char *argv[])
{
//打开五个进程,其中tid1是生产者进程,其余是消费者进程
pthread_t tid1,tid2,tid3,tid4,tid5;
if(pthread_create(&tid1,NULL,task1,NULL))
{
perror("");
return -1;
}
if(pthread_create(&tid2,NULL,task2,NULL))
{
perror("");
return -1;
}
if(pthread_create(&tid3,NULL,task2,NULL))
{
perror("");
return -1;
}
if(pthread_create(&tid4,NULL,task2,NULL))
{
perror("");
return -1;
}
if(pthread_create(&tid5,NULL,task2,NULL))
{
perror("");
return -1;
}
//初始化条件变量
pthread_cond_init(&cond,NULL);
//初始化互斥锁
pthread_mutex_init(&mutex,NULL);
//设置消费者进程为分离态
pthread_detach(tid2);
pthread_detach(tid3);
pthread_detach(tid4);
pthread_detach(tid5);
//阻塞回收生产者进程
pthread_join(tid1,NULL);
//销毁互斥锁
pthread_mutex_destroy(&mutex);
//销毁条件变量
pthread_cond_destroy(&cond);
return 0;
}