조건 변수와 배율의 동기화를 바탕으로 하는 3선 순서 인쇄 abc(10회) 구현

코드 먼저 보기
//          abc
//            
//
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<pthread.h>//        

int i=0;
int n=0;
//     ,    
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;

void* printa()
{
	while(n<10)
	{
		pthread_mutex_lock(&mutex);
		while(i!=1)
			pthread_cond_wait(&cond,&mutex);
		pthread_t tid;
		tid=pthread_self();
		printf("a   tid:%lu
",tid); i++; pthread_mutex_unlock(&mutex); sleep(1); } return (void *)0; } void* printb() { while(n<10){ pthread_mutex_lock(&mutex); while(i!=2) pthread_cond_wait(&cond,&mutex); pthread_t tid; tid=pthread_self(); printf("b tid:%lu
",tid); i++; pthread_mutex_unlock(&mutex); } return (void *)0; } void* printc() { while(n<10) { pthread_mutex_lock(&mutex); while(i!=3) pthread_cond_wait(&cond,&mutex); pthread_t tid; tid=pthread_self(); printf("c tid:%lu
",tid); i=1; n++; sleep(1); pthread_mutex_unlock(&mutex); printf("
"); } return (void *)0; } int main() { pthread_t tid; int err; err=pthread_create(&tid,NULL,printa,NULL); if(err!=0) printf("pthread_creat erro
"); err=pthread_create(&tid,NULL,printb,NULL); if(err!=0) printf("pthread_creat erro
"); err=pthread_create(&tid,NULL,printc,NULL); if(err!=0) printf("pthread_creat erro
"); pthread_mutex_lock(&mutex); i++; pthread_mutex_unlock(&mutex); while(1) { if(i==1||i==2||i==3) pthread_cond_broadcast(&cond); if(n==10) break; } exit(0); }

조건 변수는 라인의 출력 여부를 결정하고, 상호 배척량 보호는 조건에 대한 것이다.설명이 필요한 건 pthreadcond_wait()가 전송하는 매개 변수는 잠긴 상호 배척량과 조건입니다. 함수 내부에서 상호 배척량을 잠금해제합니다. 이렇게 하면 다른 라인에서 상호 배척량 잠금을 신청하는 작업이 성공할 수 있습니다. 3개의 라인은while(조건)에 머물게 됩니다.마지막으로 pthread 기억하세요cond_broadcast(&cond);

좋은 웹페이지 즐겨찾기