뮤텍스를 이용한 멀티스레드 프린팅 동기화

CBeginner
지금 연습하기

소개

이 프로젝트에서는 멀티 스레드 환경에서 문자열 출력을 동기화하기 위해 뮤텍스 (mutex) 를 사용하는 방법을 배우게 됩니다. 기존의 "Chaotic Typewriter" 프로그램을 수정하여 문자열이 글자 혼합 없이 올바른 순서로 출력되도록 할 것입니다.

👀 미리보기

$ gcc printer.c -o printer -lpthread
$ ./printer
helloworld

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • init() 함수에서 뮤텍스를 초기화하는 방법
  • printer() 함수에서 뮤텍스를 잠그고 (lock) 해제 (unlock) 하여 출력 프로세스에 대한 독점적인 접근을 보장하는 방법
  • 수정된 프로그램을 컴파일하고 실행하여 올바른 출력을 확인하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 멀티 스레드 프로그램에서 공유 자원에 대한 접근을 동기화하는 데 있어 뮤텍스의 중요성을 이해합니다.
  • 뮤텍스 잠금 및 해제 기술을 적용하여 여러 스레드의 실행을 조정합니다.
  • 원하는 출력을 얻기 위해 멀티 스레드 프로그램의 문제를 해결하고 수정합니다.

뮤텍스 초기화

이 단계에서는 init() 함수에서 뮤텍스를 초기화하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:

  1. /home/labex/project/ 디렉토리에 있는 printer.c 파일을 엽니다.
  2. printer 함수에 이미 제공된 코드에서, 뮤텍스는 출력 프로세스에 대한 독점적인 접근을 보장하기 위해 시작 부분에서 잠깁니다 (pthread_mutex_lock(&mutex)). 문자열이 완전히 출력되면 뮤텍스가 해제됩니다 (pthread_mutex_unlock(&mutex)), 다른 스레드가 출력할 수 있도록 합니다.
  3. init() 함수를 찾아 뮤텍스를 초기화하기 위해 다음 코드를 추가합니다:
void init()
{
    pthread_mutex_init(&mutex, NULL);
}

이 코드는 POSIX Threads (pthreads) 라이브러리의 일부인 pthread_mutex_init() 함수를 사용하여 mutex 변수를 초기화합니다. 두 번째 인수인 NULL은 기본 뮤텍스 속성을 사용함을 지정합니다.

프로그램 컴파일 및 실행

printer.c 파일에 대한 수정을 완료했으므로 이제 프로그램을 컴파일하고 실행할 수 있습니다.

  1. 터미널을 열고 /home/labex/project/ 디렉토리로 이동합니다.
  2. pthreads 라이브러리를 링크하기 위해 -lpthread 플래그를 사용하여 프로그램을 컴파일합니다:
gcc printer.c -o printer -lpthread
  1. 프로그램을 실행합니다:
./printer

이제 다음 출력을 볼 수 있습니다:

helloworld

예상대로 "hello"와 "world" 문자열이 글자 혼합 없이 순서대로 출력됩니다.

축하합니다! "Chaotic Typewriter" 프로그램을 의도한 대로 작동하도록 성공적으로 수정했습니다.

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습