주 루틴 과 서브 루틴 은 각각 일정 횟수 를 순환한다
2373 단어 Linux/Shell
서브 스 레 드 순환 10 다음 주 스 레 드 순환 100 다음, 이어서 다시 하위 스 레 드 로 돌아 가 순환 합 니 다. 10 다음, 다시 메 인 스 레 드 로 돌아 가 다시 순환 합 니 다. 100 회, 이렇게 50 회 순환 하여 코드 를 써 보 세 요.
컴 파일 할 때 두 가지 문제 가 발생 했 습 니 다.
1. C 언어 에 서 는 bool 형식 이 지원 되 지 않 기 때문에 bool 을 int 로 사용자 정의 해 야 합 니 다.
2. for 언어 에 서 는 for (int i =..) 가 지원 되 지 않 습 니 다. 그렇지 않 으 면 'for' loop initial declarations are only allowed in C99 mode 오 류 를 보고 할 수 있 습 니 다.
#include
#include
#include
#include
#define bool int
#define true 1
#define false 0
pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int i = 0;
int main_count=0;
int subtread_count=0;
bool main_thread_wait_flag = false;//线程等待标志
bool subthread_wait_flag = false;
void main_thread_func()
{
while(true)
{
pthread_mutex_lock(&mylock);
main_thread_wait_flag = true;
pthread_cond_wait(&cond,&mylock);
main_thread_wait_flag = false;
pthread_mutex_unlock(&mylock);
for(i=1;i<=100;i++)
{
printf("main thread: %d
",i);
}
while(true)
{
pthread_mutex_lock(&mylock);
if(true == subthread_wait_flag)
{
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mylock);
break;
}
pthread_mutex_unlock(&mylock);
}
++main_count;
if(main_count >= 50)
{
printf("main thread loop over 50 times
");
break;
}
}
}
void *subthread_func(void *arg)
{
while(true)
{
for(i=1;i<=10;i++)
{
printf("subthread: %d
",i);
}
while(true)
{
pthread_mutex_lock(&mylock);
if(true == main_thread_wait_flag)
{
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mylock);
break;
}
pthread_mutex_unlock(&mylock);
}
pthread_mutex_lock(&mylock);
subthread_wait_flag = true;
pthread_cond_wait(&cond,&mylock);
subthread_wait_flag = false;
pthread_mutex_unlock(&mylock);
++subtread_count;
if(subtread_count >= 50)
{
printf("subthread loop over 50 times
");
break;
}
}
return (void *)0;
}
int main()
{
pthread_t tid;
pthread_create(&tid,NULL,subthread_func,NULL);
main_thread_func();
pthread_join(tid,NULL);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
주 루틴 과 서브 루틴 은 각각 일정 횟수 를 순환한다주 프로 세 스 와 하위 프로 세 스에 서 서로 배척 하 는 양 과 조건 변 수 를 사 용 했 습 니 다. 서브 스 레 드 순환 10 다음 주 스 레 드 순환 100 다음, 이어서 다시 하위 스 레 드 로 돌아 가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.