posted by Kyleslab 2010. 12. 11. 01:37

메인함수에서 소비자와 생산자의 쓰레드가 만들어지도록 호출하고
처리후 메인쓰레드가 종료될때 소멸자가 호출되는데 이 호출되는 순간에도 각자 자신의 쓰레드가 종료되지않고 돌고 있기 때문이다. 해결책은 메인쓰레드가 종료될때 소멸자가 호출되는것을 이용하여 소멸자가 호출되었을대 모든 자식 스레드를 종료할때까지 기다린다. 그다음 메인스레드가 종료되게하면 문제가 해결된다.

::WaitForSingleObject( ( HANDLE )( _thread ), INFINITE);

또한 이 생산자/소비자의 문제에서는 멀티코어에서 생길수 있는 동일 메모리공유 문제에 대해서는 volatile boolean변수로 플래그를 만들어 해결한다.

그러나 이경우에도 생산자와 소비자 서로의 쓰레드가 다르므로 터질가능성이 있다. 이경우에는 소멸자에서 웨이트를 넣어두고 와일루프안에서 이 웨이트를 풀어주게만든다.

::ReleaseMutex(_thread);

결국 플래그와 공유변수에 대한 락으로 해결하게된다.