>  기사  >  백엔드 개발  >  C 언어에서 스레드를 이용한 무한 인쇄 1 2 3

C 언어에서 스레드를 이용한 무한 인쇄 1 2 3

WBOY
WBOY앞으로
2023-08-29 08:17:021128검색

使用C语言的线程无限打印1 2 3

여기서 C 프로그래밍 언어의 스레드를 사용하여 무한 시간 동안 1 2 3 시퀀스를 반복적으로 인쇄해야 합니다.

코드의 샘플 출력을 살펴보겠습니다.

1 2 3 1 2 3 1 2 3 1 2 3

이를 위해 C 프로그래밍 언어에서 병렬로 실행되는 세 개의 스레드를 사용해야 합니다. 또한 첫 번째 스레드에서 1로 초기화되고 이전 값을 기반으로 해당 값을 업데이트하는 변수가 필요합니다. 그런 다음 함수 내부에서 무한 루프를 실행합니다.

Example

저희 솔루션을 구현하는 프로그램을 살펴보겠습니다.

#include <stdio.h>
#include <pthread.h>
pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond2 = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond3 = PTHREAD_COND_INITIALIZER;
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int value = 1;
void *foo(void *n){
   while(1) {
      pthread_mutex_lock(&lock);
      if (value != (int)*(int*)n) {
         if ((int)*(int*)n == 1) {
            pthread_cond_wait(&cond1, &lock);
         } else if ((int)*(int*)n == 2) {
            pthread_cond_wait(&cond2, &lock);
         } else {
            pthread_cond_wait(&cond3, &lock);
         }
      }
      printf("%d ", *(int*)n);
      if (value == 3) {
         value = 1;
         pthread_cond_signal(&cond1);
      }
      else if(value == 1) {
         value = 2;
         pthread_cond_signal(&cond2);
      } else if (value == 2) {
            value = 3;
            pthread_cond_signal(&cond3);
      }
      pthread_mutex_unlock(&lock);
   }
   return NULL;
}
int main(){
   pthread_t tid1, tid2, tid3;
   int n1 = 1, n2 = 2, n3 = 3;
   pthread_create(&tid1, NULL, foo, (void *)&n1);
   pthread_create(&tid2, NULL, foo, (void *)&n2);
   pthread_create(&tid3, NULL, foo, (void *)&n3);
   while(1);
   return 0;
}

Output

1 2 3 1 2 3 1 2 3 1 2 3 1 2 3&hellip;.

위 내용은 C 언어에서 스레드를 이용한 무한 인쇄 1 2 3의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제