【UNIX】通過線程的同步和互斥完成的AB循環


/****************************mutex**********************/
#include
#include
#include 
#include
#include 

#define _LOCK_

pthread_mutex_t mutex;

void *t1(void *arg)
{
	int i;
	
pthread_mutex_lock(&mutex);

	for (i=0;i<3;i++){
		printf("AAAAAAAAAA\n");
		sleep(1);	
	}
	
pthread_mutex_unlock(&mutex);

	pthread_exit(NULL);
}

void *t2(void *arg)
{
	int i;

pthread_mutex_lock(&mutex);

	for (i=0;i<3;i++){
		printf("BBBBBBBBBB\n");
		sleep(1);
	}
	
pthread_mutex_unlock(&mutex);
	
	pthread_exit(NULL);
}

int main ()
{
	pthread_t thread1,thread2;
	
	pthread_create(&thread1,NULL,t1,NULL);

	pthread_create(&thread2,NULL,t2,NULL);

	if (pthread_join(thread1, NULL) != 0) {
		perror("main");
	}

	if (pthread_join(thread2, NULL) != 0) {
		perror("main");
	}
	
	return 0;
}

/********************************sem************************/
#include
#include
#include 
#include
#include 
#include

sem_t sem;

void *t1(void *arg)
{
	int i;
	
	sem_wait(&sem);
	for (i=0;i<3;i++){
		printf("AAAAAAAAAA\n");
		sleep(1);
	}
//	sem_post(&sem);
		
	pthread_exit(NULL);
}
void *t2(void *arg)
{
	int i;

//	sem_wait(&sem);
	
	for (i=0;i<3;i++){
		printf("BBBBBBBBBB\n");
		sleep(1);
	}
	sem_post(&sem);
	
	pthread_exit(NULL);
}

int main ()
{
	pthread_t thread1,thread2;

	pthread_create(&thread1,NULL,t1,NULL);

	pthread_create(&thread2,NULL,t2,NULL);

	if (pthread_join(thread1, NULL) != 0) {
		perror("main");
	}

	if (pthread_join(thread2, NULL) != 0) {
		perror("main");
	}

	return 0;
}
發佈了65 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章