SNU-ARC / 2024_spring_sysprog_Lab5

8 stars 0 forks source link

실행 순서에 대한 질문 있습니다. #5

Open kjae0 opened 5 months ago

kjae0 commented 5 months ago

안녕하세요? 먼저 마지막 랩까지 신경써주시는 점 감사드립니다.

구현을 하다보면 예를 들어 어떤 customer1이 cheese, bulgogi, bigmac을 주문했다고 했을 때, 반드시 ~burger for customer 1 is ready의 출력이 (즉, kitchen_task의 내부 printf 호출이) 주문 순서인 cheese, bulgogi, bigmac 순서와 같아야하나요? 레퍼런스에서는 global mutex를 통해 순서가 같은 것으로 생각되는데, 출력 순서가 다르게 구현돼도 괜찮을까 하여 여쭤봅니다.

ex) reference [Thread 139984384288512] To server: Can I have cheese bulgogi bigmac burger(s)? [Thread 140294120032000] generating cheese burger for customer 0 [Thread 140294136817408] generating bulgogi burger for customer 0 [Thread 140294128424704] generating bigmac burger for customer 0 인데,

[Thread 139984384288512] To server: Can I have cheese bulgogi bigmac burger(s)? [Thread 140294120032000] generating cheese burger for customer 0 [Thread 140294128424704] generating bigmac burger for customer 0 ( diff ) [Thread 140294136817408] generating bulgogi burger for customer 0 ( diff )

와 같이 다른 순서로 출력되어도 괜찮을까요?

감사합니다.

kwonsw055 commented 5 months ago

"generating xxx burger for customer n" 문구의 순서가 주문 순서와 같아야 할 필요는 없습니다.

레퍼런스에서도 global mutex를 통해 순서를 맞추지는 않습니다. 프로그램에서 order가 담기는 queue 구조가 하나뿐인데, order를 enqueue 하는 순서가 주문의 순서와 동일하기에, 먼저 dequeue 한 kitchen thread가 먼저 문구를 출력할 확률이 높아 레퍼런스에서 주문의 순서가 유지되는 것처럼 보일 뿐입니다.

kjae0 commented 5 months ago

@kwonsw055 감사합니다!

그러면 customer ID마다의 burger의 종류와 개수만 유지된다면, 순서는 전혀 무관하다고 이해해도 될까요? client로 your order( burgers ... ) is ready로 전달되는데, 주문 순서와 무관하게 저기 괄호 내부 burgers들의 순서가 섞여야할 것 같아 질문드렸었습니다.

kwonsw055 commented 5 months ago

네, README에 명시된 바와 같이, 전달되는 order string에서 burger의 순서는 무관합니다.

The sequence of burger names in the order string may differ from the sequence in the request, but the order string must contain all the burgers in the request. For example, if the request was “bulgogi chicken bulgogi”, the order string “chicken bulgogi bulgogi” is valid, while “bulgogi chicken” is invalid.