주 루틴 과 서브 루틴 은 각각 일정 횟수 를 순환한다

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; }

좋은 웹페이지 즐겨찾기