2. κΈ°λ³Έ ¶
- μλλ κ°λ¨νκ² μ°λ λ νλλ₯Ό μμ±νλ μμ
~cpp import time import thread def myfunction(string,sleeptime,*args): while 1: print string time.sleep(sleeptime) #sleep for a specified amount of time. if __name__=="__main__": thread.start_new_thread(myfunction,("Thread No:1",2)) while 1:pass
2.1. Lock ¶
- lockμ΄ μ νμνλ? -> νλμ κ³΅μ© μμμ μ¬λ¬ μ€λ λκ° λμμ μ¬μ©νλ©΄ λ¬Έμ κ° μκΈΈμ μλ€. κ·Έλμ 곡μ©μμμ μ¬μ©ν λλ λ½μ κ±Έκ³ μ¬μ©νκ³ μ¬μ©νκ³ λμλ λ½μ νΌλ€.
- λ¬Έμ μν© μ : count λ³μλ₯Ό κ° μ°λ λλ€μ΄ 1μ μ¦κ°λ₯Ό μν€λλ° ν μ€λ λκ° μ¦κ° μν€λ λμ λ€λ₯Έ μ€λ λλ λμμ μ¦κ° μν€λ€ 보면 μλ 2 μ¦κ° ν΄μΌνλλ° 1μ¦κ° νλ μκ° μκΈ΄λ€..
- λ¬Έμ μν© μ : count λ³μλ₯Ό κ° μ°λ λλ€μ΄ 1μ μ¦κ°λ₯Ό μν€λλ° ν μ€λ λκ° μ¦κ° μν€λ λμ λ€λ₯Έ μ€λ λλ λμμ μ¦κ° μν€λ€ 보면 μλ 2 μ¦κ° ν΄μΌνλλ° 1μ¦κ° νλ μκ° μκΈ΄λ€..
~cpp import time import thread def myfunction(string,sleeptime,lock,*args): while 1: #entering critical section lock.acquire() print string," Now Sleeping after Lock acquired for ",sleeptime time.sleep(sleeptime) print string," Now releasing lock and then sleeping again" lock.release() #exiting critical section time.sleep(sleeptime) # why? if __name__=="__main__": lock=thread.allocate_lock() thread.start_new_thread(myfunction,("Thread No:1",2,lock)) thread.start_new_thread(myfunction,("Thread No:2",2,lock)) while 1:pass
- μ μμ€μμ why λΆλΆ,, μ sleepμ λ£μμκΉ?(λ§μ½ μ κ²μ λΉΌλ©΄ νμ°λ λκ° μμμ λ
μ νκ² λλ€) -> Python μ threadsafe νμ§ μλ€. Pythonμμλ μλ°μ²λΌ μ€λ λκ° λ¬Έλ²μ μ€μν μμΉλ₯Ό μ°¨μ§νκ³ μμ§ μλ€. κ·Έκ²λ³΄λ€ μ΄μ κ°λ₯μ±μ λ μ€μνκ² μκ°νλ€.
- λͺ¨λ built-in ν¨μκ° λ€λ₯Έ μ°λ λκ° μ€νν μ μλλ‘ I/Oμ λν block waiting μ νλ κ²μ μλλ€.(time.sleep(), file.read(), select.select()) μ μμλλ‘ μλνλ€)
- lock μνμ μλ acquire() ν¨μμ λνμ¬ interrupt νλκ²μ κ°λ₯νμ§ μλ€. (ν€λ³΄λ μΈν°λ½νΈλ lockμ μ»κ³ λμμΌ μΌμ΄λλ€.)
- κ·Έλμ μλμ κ°μ μμ€λ starvationμ μΌμΌν¨λ€.
~cpp hile 1: lock.acquire() ..... #some operation ..... lock.release()
Python