조건 변수와 배율의 동기화를 바탕으로 하는 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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 라인과synchronized 키워드를 깊이 있게 설명하다루틴이야말로 프로그램의 집행자이고 여러 루틴 간에 프로세스 중의 자원을 공유하고 있다.하나의 cpu는 동시에 하나의 라인만 실행할 수 있으며, 모든 라인은 하나의 타임 슬라이스가 있으며, 타임 슬라이스가 다 사용하면...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.