编程要求:原线程创建两个新线程,实现两个新线程轮流计数的功能。
使用互斥锁完成两个子线程交替计数
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
pthread_mutex_t m;
int flag;int count;
void *tfn1(void *arg);
void *tfn2(void *arg);
void err_thread(int ret,char *str);
int main(void)
{
pthread_t pid,tid;
count=0; flag=1;
pthread_mutex_init(&m,NULL);
//create thread
int ret1 = pthread_create(&pid,NULL,tfn1,NULL);
err_thread(ret1,"pthread_create error");
int ret2 = pthread_create(&tid,NULL,tfn2,NULL);
err_thread(ret2,"pthread_create error");
//join thread
pthread_join(pid,NULL);
pthread_join(tid,NULL);
return 0;
}
void err_thread(int ret,char *str)
{
if(ret!=0){ fprintf(stderr,"%s:%s\n",str,strerror(ret)); pthread_exit(NULL); }
}
void *tfn1(void *arg)
{
while(1)
{
pthread_mutex_lock(&m);//lock
while(flag)//count
{
printf("线程1:\t ---pid:%lu \t count:%d \n",pthread_self(),count);
count++;flag=0;
}
pthread_mutex_unlock(&m);//unlock
sleep(2);
}
return NULL;
}
void *tfn2(void *arg)
{
while(1)
{
pthread_mutex_lock(&m);//lock
while(!flag)//count
{
printf("线程2:\t ---tid:%lu \t count:%d \n",pthread_self(),count);
count++;flag=1;
}
pthread_mutex_unlock(&m);//unlock
sleep(2);
}
return NULL;
}