简单实现两个线程之间的交替打印(C语言)

#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <signal.h>

pthread_mutex_t mutex;//自旋锁
pthread_cond_t cond1,cond2;
//线程1
void *thread_fun1(void * arg)
{
	int i=0;
	while(1)
	{
		pthread_mutex_lock(&mutex);//加锁
		printf("a\n");
		pthread_cond_signal(&cond2);//唤醒另一个
		pthread_cond_wait(&cond1,&mutex);//等待被唤醒
		pthread_mutex_unlock(&mutex);//解锁
		sleep(1);
		
	}
	return NULL;
}

void *thread_fun2(void * arg)
{
	int i=1;
	while(1){
		pthread_mutex_lock(&mutex);//加锁
		sleep(1);
		printf("b\n");
		pthread_cond_signal(&cond1);//唤醒另一个
		pthread_cond_wait(&cond2,&mutex);//等待被唤醒
		pthread_mutex_unlock(&mutex);//解锁
	}
	return NULL;
} 

int main()
{
	
	//创建线程
	
	pthread_t pth1,pth2;
	pthread_create(&pth1,NULL,thread_fun1,NULL);
	pthread_create(&pth2,NULL,thread_fun2,NULL);
	
	//回收线程和自旋锁
	pthread_join(pth1,NULL);
	pthread_join(pth2,NULL);
	pthread_mutex_destroy(&mutex);
	while(1);
	return 0;
}

效果如下:

 


版权声明:本文为daizhichaoaa原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。