소개
이 프로젝트에서는 멀티 스레드 환경에서 문자열 출력을 동기화하기 위해 뮤텍스 (mutex) 를 사용하는 방법을 배우게 됩니다. 기존의 "Chaotic Typewriter" 프로그램을 수정하여 문자열이 글자 혼합 없이 올바른 순서로 출력되도록 할 것입니다.
👀 미리보기
$ gcc printer.c -o printer -lpthread
$ ./printer
helloworld
🎯 과제
이 프로젝트에서 다음을 배우게 됩니다:
init()함수에서 뮤텍스를 초기화하는 방법printer()함수에서 뮤텍스를 잠그고 (lock) 해제 (unlock) 하여 출력 프로세스에 대한 독점적인 접근을 보장하는 방법- 수정된 프로그램을 컴파일하고 실행하여 올바른 출력을 확인하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- 멀티 스레드 프로그램에서 공유 자원에 대한 접근을 동기화하는 데 있어 뮤텍스의 중요성을 이해합니다.
- 뮤텍스 잠금 및 해제 기술을 적용하여 여러 스레드의 실행을 조정합니다.
- 원하는 출력을 얻기 위해 멀티 스레드 프로그램의 문제를 해결하고 수정합니다.
뮤텍스 초기화
이 단계에서는 init() 함수에서 뮤텍스를 초기화하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
/home/labex/project/디렉토리에 있는printer.c파일을 엽니다.printer함수에 이미 제공된 코드에서, 뮤텍스는 출력 프로세스에 대한 독점적인 접근을 보장하기 위해 시작 부분에서 잠깁니다 (pthread_mutex_lock(&mutex)). 문자열이 완전히 출력되면 뮤텍스가 해제됩니다 (pthread_mutex_unlock(&mutex)), 다른 스레드가 출력할 수 있도록 합니다.init()함수를 찾아 뮤텍스를 초기화하기 위해 다음 코드를 추가합니다:
void init()
{
pthread_mutex_init(&mutex, NULL);
}
이 코드는 POSIX Threads (pthreads) 라이브러리의 일부인 pthread_mutex_init() 함수를 사용하여 mutex 변수를 초기화합니다. 두 번째 인수인 NULL은 기본 뮤텍스 속성을 사용함을 지정합니다.
프로그램 컴파일 및 실행
printer.c 파일에 대한 수정을 완료했으므로 이제 프로그램을 컴파일하고 실행할 수 있습니다.
- 터미널을 열고
/home/labex/project/디렉토리로 이동합니다. - pthreads 라이브러리를 링크하기 위해
-lpthread플래그를 사용하여 프로그램을 컴파일합니다:
gcc printer.c -o printer -lpthread
- 프로그램을 실행합니다:
./printer
이제 다음 출력을 볼 수 있습니다:
helloworld
예상대로 "hello"와 "world" 문자열이 글자 혼합 없이 순서대로 출력됩니다.
축하합니다! "Chaotic Typewriter" 프로그램을 의도한 대로 작동하도록 성공적으로 수정했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



