2010-12-08 2 views

답변

1

print을 여러 스레드에서 호출하면 출력이 스케줄러의 배후에서 인터리브 될 수 있습니다.

+0

다중 스레드에서'print '를 호출하면 파이썬의 IO 계층에서 비동기 버퍼링으로 인해 출력이 다른 스레드에서 여러 번 인쇄 될 수 있습니다. – ephemient

+0

아, 상상했던 것보다 나빠요. –

+0

단일 인쇄 스레드에 대기열 사용 –

1

대답은 아니오입니다. 스레드가 서로 인터럽트 할 수 있습니다. 그러나 잠금을 사용하면이를 피할 수 있습니다.

잠금은 스레드가 글로벌 작업 (특히 여기에서는 출력 화면)에서 서로 방해하지 못하도록합니다. 스레드가 잠금을 사용하여 글로벌 작업을 사용하려는 경우 먼저 잠금이 해제되어 있는지 확인한 다음 잠금이 해제 될 때까지 기다립니다 그 다음에 자물쇠를 잠그고, 글로벌 일과 관련된 일을하고, 마지막으로 자물쇠를 해제합니다.

그러나 플래그 변수를 사용하지 않고 이것을 구현하기위한 검사를 수행하면 스레드가 if 문과 잠금을 전환 할 수 있습니다. 파이썬은 threading.lock을 정확하게 기억한다면 잠금 클래스를 구현합니다.

또한 잠금을 올바르게 사용하지 않으면 교착 상태 또는 라이브 록이 발생할 수 있습니다. 지금은 시간이별로 없기 때문에 여기에서 모든 것을 설명 할 수는 없지만 더 많은 정보를 얻으려면 Google에서 작년의 대학 강의에서 프리젠 테이션을 공유 할 수 있는지 확인하고, 거기에 좋은.