import time
import threading
class test(threading.Thread):
def __init__ (self):
threading.Thread.__init__(self)
self.doSkip = False
self.count = 0
def run(self):
while self.count<9:
self.work()
def skip(self):
self.doSkip = True
def work(self):
self.count+=1
time.sleep(1)
if(self.doSkip):
print "skipped"
self.doSkip = False
return
print self.count
t = test()
t.start()
while t.count<9:
time.sleep(2)
t.skip()
답변
스레드 안전 방식? 여기서 보호하고 싶은 부분이 보이지 않습니다.
건너 뛰기로 인해 언제든지 doSkip
을 재설정 할 수 있으므로 잠금 기능이별로 없습니다. 동시에 액세스 할 수있는 리소스가 없습니다. 따라서이 코드에서는 아무 것도 손상되거나 안전하지 않을 수 있습니다.
잠금/카운팅에 따라 다르게 실행되는 유일한 부분은 .skip()
을 호출 할 때마다 얼마나 많은 "건너 뛰기"가 예상되는지입니다. 모든 건너 뛰기가 건너 뛴 전화 인 .work()
이되도록하려면 doSkip
을 증분 및 비교/감소 모두에 대한 잠금으로 보호되는 카운터로 변경해야합니다. 현재 한 스레드는 확인 후 doSkip
재설정 전에 doSkip
을 켤 수 있습니다. 이 예제에서는 중요하지 않지만 실제 상황에서는 더 많은 코드를 사용하여 차이가 발생할 수 있습니다.
분명히 중요한 리소스가 없으므로 스레드로부터 안전하다고 할 수 있습니다.
하지만 평소와 같이 두 스레드가 스케줄러에 의해 차단/실행되는 순서를 예측할 수 없습니다.
이것은 스레드간에 데이터를 공유하지 않는 한 스레드로부터 안전합니다.
다른 스레드가 스레드 클래스에 데이터를 읽고 쓰는 데 필요한 경우 잠금과 같은 동기화 메커니즘으로 데이터를 보호하지 않으면 스레드로부터 안전하지 않습니다.
뮤텍스 부울 테스트 (예 : if (self.doSkip))가 뮤텍스 부울 집합과 별개가 될 때마다 스레드 문제가 발생할 수 있습니다.
규칙은 스레드가 가장 불편한 시간에 스왑 아웃된다는 규칙입니다. 즉, 테스트를 거친 후 세트 전입니다. 서로 가깝게 이동 시키면 스크류 업 창이 줄어들지 만 제거되지는 않습니다. 거의 항상 그 창을 완전히 닫으려면 언어 또는 커널에서 특수하게 생성 된 메커니즘이 필요합니다.
스레드 라이브러리에는 스레드 동기화 및/또는 코드의 중요한 부분을 만드는 데 사용할 수있는 세마포가 있습니다. DanM의 대답에 정교하게
는 생각할이 일어날 수 :
- 스레드 1 :
t.skip()
- 스레드 2 :
if self.doSkip: print 'skipped'
- 스레드 1 :
t.skip()
- 스레드 2 :
self.doSkip = False
- 등 .
즉, t.skip()
에 대한 모든 호출에 대해 하나씩 "건너 뛴다"고 예상 할 수 있지만,이 일련의 이벤트는이를 위반합니다.
그러나 sleep()
호출 때문에이 일련의 이벤트는 실제로 불가능하다고 생각합니다.
- 1. 이 파이썬 코드는 스레드로부터 안전한가요?
- 2. 이 코드는 스레드로부터 안전한가요?
- 3. 이 JavaScript 코드는 안전한가요?
- 4. 이 코드는 스레드로부터 안전한가요?
- 5. 이 코드는 스레드로부터 안전한가요?
- 6. 이 XDocument 코드는 안전한가요?
- 7. 이 루비 코드는 안전한가요?
- 8. 이 자바 코드는 스레드로부터 안전한가요?
- 9. 이 Java 암호화 코드는 안전한가요?
- 10. 다음 C 코드는 안전한가요?
- 11. 파이썬 :이 코드는 잘 작동
- 12. 이 코드는 스레드로부터 안전한가요? 스레드로부터 안전하게 만들려면 어떻게해야합니까?
- 13. 이 파이썬 코드는 무엇을합니까? shell = (sys.platform! = "win32"))
- 14. 이 난독 화 된 파이썬 코드는 무엇을합니까?
- 15. 이 스레드는 안전한가요?
- 16. 이 코드는
- 17. C# :이 필드 할당은 안전한가요? 이 조각에서
- 18. 이 암호 코드 스레드는 안전한가요?
- 19. 이 쿼리는 SQL 삽입으로부터 안전한가요?
- 20. 파이썬 유니 코드는
- 21. 이 코드는 안전합니까?
- 22. 이 코드는 무엇을 의미합니까?
- 23. 이 코드는 어떻게 작동합니까?
- 24. 이 클로저 코드는 무엇을합니까?
- 25. 이 코드는 중복을 삭제합니까?
- 26. 이 코드는 무엇을 의미합니까?
- 27. 이 코드는 스레드 안전합니까?
- 28. 이 코드는 어떤 기능을합니까?
- 29. 이 코드는 짧은 & 여기
- 30. 이 코드는 무엇을합니까