μμ¬νλ μ² νμλ€ λ¬Έμ (_The Dining-Philosophers Problem)
μκ°νκ³ λ¨ΉμΌλ©΄μ κ·Έλ€μ μμ λ₯Ό 보λ΄λ 5λͺ μ μ² νμλ₯Ό κ³ λ €ν΄ λ΄ μλ€. μ² νμλ€μ μν ν μ΄λΈμ 곡μ νλ©°, μ΄ ν μ΄λΈμ κ°κ° ν μ² νμμ μνλ 5κ°μ μμλ‘ λλ¬μΈμ¬ μμ΅λλ€. ν μ΄λΈ μ€μμλ ν μ¬λ°μ λ°₯μ΄ μκ³ , μλμ κ·Έλ¦Όκ³Ό κ°μ΄ ν μ΄λΈμλ λ€μ― κ°μ μ κ°λ½μ΄ λμ¬ μμ΅λλ€.
μ² νμκ° μκ°μ ν λλ λ€λ₯Έ λλ£λ€κ³Ό μνΈ μμ©μ νμ§ μμ΅λλ€. λλλ‘ μ² νμλ€μ λ°°κ° κ³ νμ§λλ° κ·Έλ΄ λμλ μμ μκ² κ°μ₯ κ°κΉμ΄ μλ λ κ°μ μ κ°λ½(μΌμͺ½ μ κ°λ½μ λ¨Όμ μ§μ΅λλ€)μ μ§μΌλ €κ³ μλν©λλ€. μ² νμλ ν λ²μ ν κ°μ μ κ°λ½λ§ μ§μ μλ μμΌλ©°, μ΄λ―Έ μ μ¬λμ μμ λ€μ΄κ° μ κ°λ½μ μ§μ μλ μμ΅λλ€. λ°°κ³ ν μ² νμκ° λμμ μ κ°λ½μ λ κ°λ₯Ό μ§μΌλ©΄, μ κ°λ½μ λμ§ μκ³ μμ λ€κ³ μλ μ±λ‘ μμ¬λ₯Ό ν©λλ€. κ·Έλ¬λ€κ° μμ¬λ₯Ό λ§μΉλ©΄, μ κ°λ½ λ κ°λ₯Ό λͺ¨λ λκ³ λ€μ μκ°μ λΉ μ§λλ€.
μμ¬νλ μ² νμλ€ λ¬Έμ λ κ³ μ μ μΈ λκΈ°ν λ¬Έμ λ‘ κ°μ£Όνλλ°, κ·Έ μ΄μ λ μ€μ©μ μΌλ‘ μ€μνκ±°λ νΉμ μ»΄ν¨ν° κ³Όνμλ€μ΄ μ² νμλ₯Ό μ«μ΄ν΄μκ° μλλΌ λ§μ λΆλ₯μ λ³ν μ μ΄ λ¬Έμ μ ν μμ΄κΈ° λλ¬Έμ λλ€. λ§μ½ λͺ¨λ μ² νμκ° λμμ λ°°κ° κ³ νκ³ κ° μ² νμκ° μΌμͺ½μ μλ μ κ°λ½μ μ‘μΌλ©΄ λ μ¬μ© κ°λ₯ν μ κ°λ½μ΄ μκΈ°μ λͺ¨λ μ² νμλ€μ μμν λκ΅°κ° ν¬κΈ°νμ§ μλ μ΄μ μμν μ€λ₯Έμͺ½ μ κ°λ½μ μ¬μ©ν μ μμ λκΉμ§ κΈ°λ€λ¦½λλ€.
μ°λ¦¬λ μ΄λ° μν©μ κ΅μ°© μν(Deadlocks)λΌκ³ λΆλ¦ λλ€. λ λ€λ₯Έ μ’μ μλ μμ΅λλ€. "λ κΈ°μ°¨κ° κ΅μ°¨λ‘μμ μλ‘ μ κ·Όν λλ, λ λ€ μμ ν μ μ§ν΄μΌ νλ©° μλλ°©μ΄ μμ΄μ§μ§ μλ ν λꡬλ λ€μ μΆλ°ν μ μλ€."μ λλ€. μ΄λ¬ν κ΅μ°©μνμ ν΄κ²°λ°©μμ λν΄μλ λ€μ κ²μκΈμμ λ μμΈνκ² μ λ¦¬ν΄ λ³΄λλ‘ νκ³ μ΄λ² κ²μκΈ μμλ μμ¬νλ μ² νμλ€ λ¬Έμ μ μν©μ ν΄κ²°νλ λ κ°μ§ λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.
(1) μΈλ§ν¬ ν΄κ²°μ(_Semaphore Solution)
ν κ°μ§ κ°λ¨ν ν΄κ²°μ± μ κ° μ κ°λ½μ νλμ μΈλ§ν¬λ‘ νννλ κ²μ λλ€. μ² νμλ κ·Έ μΈλ§ν¬μ wait() μ°μ°μ μ€ννμ¬ μ κ°λ½μ μ§μΌλ €κ³ μλν©λλ€. κ·Έλ λν ν΄λΉ μΈλ§ν¬μ signal() μ°μ°μ μ€νν¨μΌλ‘μ¨ μμ μ μ κ°λ½μ λμ΅λλ€. κ·Έλ¬λ―λ‘ κ³΅μ μλ£λ λ€μκ³Ό κ°μ΅λλ€.
semaphore chopstick[5];
μ¬κΈ°μ chopstickμ μμλ€μ λͺ¨λ 1λ‘ μ΄κΈ°νλμ΄ μμ΅λλ€. μ² νμ iμ ꡬ쑰λ μλ μμ€μ λνλ μμ΅λλ€.
μ΄ ν΄κ²°μμ μΈμ ν λ μ² νμκ° λμμ μμ¬νμ§ μλλ€λ κ²μ 보μ₯νμ§λ§, κ΅μ°©μνλ₯Ό μΌκΈ°ν κ°λ₯μ±μ΄ μκΈ° λλ¬Έμ μ±νν μ μμ΅λλ€. 5λͺ μ μ² νμ λͺ¨λκ° λμμ λ°°κ° κ³ νκ² λμ΄, κ°κ° μμ μ μΌμͺ½ μ κ°λ½μ μ‘λλ€κ³ κ°μ ν΄ λ΄ μλ€. chopstickμ λͺ¨λ μμλ€μ μ΄μ 0μ΄ λ κ²μ λλ€. κ° μ² νμκ° κ·Έμ μ€λ₯Έμͺ½ μ κ°λ½μ μ§μΌλ €κ³ νλ©΄ μμν κΈ°λ€λ €μΌ ν κ²μ λλ€.
μμ¬νλ μ² νμμ κ΅μ°©μν λ¬Έμ μ λν μ¬λ¬ κ°μ§ ν΄κ²°μ± λ€μ λ€μκ³Ό κ°μ΅λλ€.
- μ΅λ 4λͺ μ μ² νμλ§μ΄ ν μ΄λΈμ λμμ μμ μ μλλ‘ νλ€.
- ν μ² νμκ° μ κ°λ½ λ κ°λ₯Ό λͺ¨λ μ§μ μ μμ λλ§ μ κ°λ½μ μ§λλ‘ νμ©νλ€(μ΄λ κ² νλ €λ©΄ μ² νμλ μκ³ κ΅¬μ μμμλ§ μ κ°λ½μ μ§μ΄μΌ νλ€).
- λΉλμΉ ν΄κ²°μμ μ¬μ©νλ€. μ¦, νμ λ²νΈμ μ² νμλ λ¨Όμ μΌμͺ½ μ κ°λ½μ μ§κ³ λ€μμ μ€λ₯Έμͺ½ μ κ°λ½μ μ§λλ€. λ°λ©΄μ μ§μ λ²νΈμ μ² νμλ μ€λ₯Έμͺ½ μ κ°λ½μ μ§κ³ λ€μμ μΌμͺ½ μ κ°λ½μ μ§λλ€.
κ·Έλ¬λ μμ¬νλ μ² νμλμ λ¬Έμ μ λν λ§μ‘±ν λ§ν ν΄κ²°μλ€μ λ°λμ μ² νμ μ€ μ΄λ νλκ° κ΅Άμ΄ μ£½μ κ°λ₯μ±μ΄ μκΈ°μ§ μλλ‘ λ°©μ§ν΄μΌ νλ€λ κ²μ μ£Όμν΄μΌ ν©λλ€. κ΅μ°©μνκ° μλ ν΄κ²°μμ΄ λ°λμ κΈ°μμ κ°λ₯μ±λ μ κ±°νλ κ²μ μλλλ€.
(2) λͺ¨λν° ν΄κ²°μ(_Monitor Solution)
λ€μμΌλ‘ μμ¬νλ μ² νμ λ¬Έμ μ λν κ΅μ°© μνκ° μλ ν΄κ²°μμ μ μν¨μΌλ‘μ¨ λͺ¨λν° κ°λ μ μ€λͺ ν΄λ³΄κ² μ΅λλ€. μ΄ ν΄κ²°μμ μ² νμλ μμͺ½ μ κ°λ½ λͺ¨λ μ»μ μ μμ λλ§ μ κ°λ½μ μ§μ μ μλ€λ μ νμ κ°μ ν©λλ€. μ΄ ν΄κ²°μμ ꡬννλ €λ©΄, μ² νμκ° μ²ν μ μλ μΈ κ°μ§ μνλ€μ ꡬλΆν νμκ° μμ΅λλ€. μ΄λ¬ν λͺ©μ μΌλ‘ λ€μμ μλ£κ΅¬μ‘°λ₯Ό λμ ν©λλ€.
enum {THINKING, HUNGRY, EATING} state[5];
μ² νμ iλ κ·Έμ μμͺ½ λ μ΄μμ΄ μμ¬νμ§ μμ λλ§ λ³μ state[i] = EATINGμΌλ‘ μ€μ ν μ μμ΅λλ€(쑰건 (state[(i+4)%5] != EATIHG) κ·Έλ¦¬κ³ (state[(i+1)%5] != EATING)μ΄ μ±λ¦½ν λλ§).
λν λ€μμ μ μΈν νμκ° μμ΅λλ€.
condition self[5];
selfλ μ² νμ iκ° λ°°κ³ νμ§λ§ μμ μ΄ μνλ μ κ°λ½μ μ§μ μ μμ λ μ κ°λ½ μ§κΈ°λ₯Ό λ―Έλ£° μ μκ² ν©λλ€.
μ°λ¦¬λ μ΄μ μμ¬νλ μ² νμ λ¬Έμ μ λν μ°λ¦¬μ ν΄κ²°μμ κΈ°μ ν μ μμ΅λλ€. μ κ°λ½μ λΆλ°°λ λͺ¨λν° DiningPhilosophersμ μ ν΄ μ μ΄λ©λλ€. μ΄ λͺ¨λν°κ° μ μκ° μλ μμ€μ λμ μμ΅λλ€.
κ° μ² νμλ μμ¬νκΈ° μ μ pickup() μ°μ°μ λ°λμ νΈμΆν΄μΌ ν©λλ€. μ΄ νλμ μ² νμ νλ‘μΈμ€μ μΌμ μ€μ§λ₯Ό λ³μ μλ μμ΅λλ€. μ°μ°μ΄ μ±κ³΅μ μΌλ‘ λλλ©΄, μ² νμλ μμ¬ν μ μμ΅λλ€. μμ¬λ₯Ό λ§μΉ ν, μ² νμλ putdown() μ°μ°μ νΈμΆν©λλ€. λ°λΌμ μ² νμ iλ λ°λμ λ€μκ³Ό κ°μ μμλ‘ pickup()κ³Ό putdown() μ°μ°μ νΈμΆν΄μΌ ν©λλ€.
DiningPhilosophers.pickup(i);
... eat ...
DiningPhilosophers.putdown(i);
μ΄ ν΄κ²°μμ΄ μ΄μν λ μ² νμκ° λμμ μμ¬νμ§ μλ κ²κ³Ό κ΅μ°© μνκ° λ°μνμ§ μλλ€λ κ²μ 보μ₯νλ€λ κ²μ 보μ΄κΈ°λ μ½μ΅λλ€. κ·Έλ¬λ μ°λ¦¬λ μ² νμκ° κ΅Άμ΄μ£½λ κ²μ΄ κ°λ₯νλ€λ κ²μ μ μν΄μΌ ν©λλ€(κΈ°μμνμ λΉ μ§λ μ² νμκ° μμ μ μμ)
'ComputerScience π > μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[OS] λ©μΈ λ©λͺ¨λ¦¬(2) - νμ΄μ§ κΈ°λ² (0) | 2022.03.20 |
---|---|
[OS] λ©μΈ λ©λͺ¨λ¦¬(1) - 물리, λ Όλ¦¬μ£Όμ λ° μ°μ λ©λͺ¨λ¦¬ ν λΉ (0) | 2022.03.20 |
[OS] κ΅μ°© μν(Deadlocks) (0) | 2022.03.10 |
[OS] νλ‘μΈμ€ λκΈ°ν(Process Synchronization) (0) | 2022.02.24 |
[OS] CPU μ€μΌμ€λ§(CPU Scheduling) (0) | 2022.02.20 |
[OS] μ€λ λ ν(thread pool) (0) | 2022.02.14 |
λκΈ