본문 바로가기
error 일기

쓰레드 관련 error(philosopher)

by 정구지개발자 2023. 7. 4.
728x90

1. 개선전 사진

 

2. 개선후 사진

 

우선 philosopher라고 철학자 문제를 c로 구현해 보았다.

위의 사진에서 사진1에서 philo->check->die = 1 이 died가 프린트되고난 후에 바뀌게 된다.

내코드에서는 die = 1 이 된다면 쓰레드가 종료되는 플레그 같은 역활을 하게 된다. 

이 때 많은 수의 쓰레드를 돌리면 died가 먼저 출력되고 philo->check->die = 1로 바뀌는 그 사이 시간에

다른 쓰레드에서 어떤 문구를 출력 할수 있게 된다.

 

따라서 사진2에서 본거와 같이 die = 1 가 먼저 바뀌고 나서 died를 출력하게 된다면  died가 다른쓰레드 문구 보다 먼저 출력되는 일이 없어진다.

 

이러한 시간차이도 꼼꼼히 생각해봐야할 것 같다. 멀티 쓰레드를 써야할 일이 있다면 이런식의 시간차이도 생각해주고 코드를 작성하게된다면 좋은 코드가 될거 같다. 

728x90

댓글