π Deadlock?
λ κ° μ΄μμ νλ‘μΈμ€ νΉμ μ€λ λκ° μλ‘κ° κ°μ§ 리μμ€λ₯Ό κΈ°λ€λ¦¬λ μν
π λ°λλ½μ λ§λλ λ€ κ°μ§ 쑰건
1. Mutual exclusion
리μμ€(resource)λ₯Ό 곡μ ν΄μ μ¬μ©ν μ μλ€.
2. Hold and Wait
νλ‘μΈμ€κ° μ΄λ―Έ νλ μ΄μμ 리μμ€λ₯Ό μ·¨λν(hold) μνμμ λ€λ₯Έ νλ‘μΈμ€κ° μ¬μ©νκ³ μλ 리μμ€λ₯Ό μΆκ°λ‘ κΈ°λ€λ¦°λ€(wait).
3. No preemption
리μμ€ λ°ν(relase)μ μ€μ§ κ·Έ 리μμ€λ₯Ό μ·¨λν νλ‘μΈμ€λ§ ν μ μλ€.
4. Circular wait
νλ‘μΈμ€λ€μ΄ μν(circular) ννλ‘ μλ‘μ 리μμ€λ₯Ό κΈ°λ€λ¦°λ€.
π OSμ λ°λλ½ ν΄κ²° λ°©λ²
1. λ°λλ½ λ°©μ§
λ€ κ°μ§ 쑰건 μ€ νλκ° μΆ©μ‘±λμ§ μκ² μμ€ν μ λμμΈ
#1. Mutual exclusion λ°©μ§: 리μμ€λ₯Ό 곡μ κ°λ₯νκ² ν¨. νμ€μ μΌλ‘ λΆκ°λ₯.
#2. Hold and wait λ°©μ§:
- μ¬μ©ν 리μμ€λ€μ λͺ¨λ νλν λ€μ μμ
- 리μμ€λ₯Ό μ ν κ°μ§μ§ μμ μνμμλ§ λ¦¬μμ€λ₯Ό μμ²
#3. No preemption
- μΆκ°μ μΈ λ¦¬μμ€λ₯Ό κΈ°λ€λ €μΌ νλ€λ©΄ μ΄λ―Έ νλν 리μμ€λ₯Ό λ€λ₯Έ νλ‘μΈμ€κ° μ μ κ°λ₯νλλ‘ νλ€.
#4. Circular wait
- λͺ¨λ 리μμ€μ μμ 체κ³λ₯Ό λΆμ¬ν΄μ μ€λ¦μ°¨μμΌλ‘ 리μμ€λ₯Ό λΆμ¬. λ°λλ½ λ°©μ§ λ°©λ² μ€ κ°μ₯ λ§μ΄ μ¬μ©λλ λ°©μ.
2. λ°λλ½ ννΌ
μ€ν νκ²½μμ μΆκ°μ μΈ μ 보λ₯Ό νμ©ν΄μ λ°λλ½μ΄ λ°μν κ² κ°μ μν©μ ννΌνλ κ²
Banker algorithm
: 리μμ€ μμ²μ νλ½ν΄μ€¬μ λ λ°λλ½μ΄ λ°μν κ°λ₯μ±μ΄ μμΌλ©΄ 리μμ€λ₯Ό ν λΉν΄λ μμ ν λ κΉμ§ κ³μ μμ²μ κ±°μ νλ μκ³ λ¦¬μ¦.
3. λ°λλ½ κ°μ§μ 볡ꡬ
λ°λλ½μ νμ©νκ³ λ°λλ½μ΄ λ°μνλ©΄ 볡ꡬνλ μ λ΅
볡ꡬ μ λ΅ 1. νλ‘μΈμ€λ₯Ό μ’ λ£νλ€.
볡ꡬ μ λ΅ 2. 리μμ€μ μΌμμ μΈ μ μ μ νμ©νλ€.
4. λ°λλ½ λ¬΄μ
π νλ‘κ·Έλλ° λ 벨μμ λ°λλ½
public class Main {
public static void main(String[] args) {
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {...});
Thread t2 = new Thread(() -> {...});
t1.start();
t2.start();
}
}
Thread t1 = new Thread(() -> {
synchronized(lock1) {
System.out.println("[t1] get lock1");
synchronized(lock2) {
System.out.println("[t1] get lock2");
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
System.out.println("[t2] get lock2");
synchronized(lock1) {
System.out.println("[t2] get lock1");
}
}
});
- mutual exclusionμ λ¨λ°νμ§ μμλμ§ νμΈ
mutual exclusionμ΄ λ°λμ νμν μν©μ΄λΌλ©΄
- lock μ·¨λ μμλ₯Ό λ³κ²½νλ©΄ circular waitλ₯Ό λ°©μ§
- μ€μ²©ν΄μ lockμ μ·¨λνλ € ν΄μ hold and waitκ° λ°μνλ―λ‘, μ€μ²©ν΄μ μ·¨λνμ§ μλλ‘νμ¬ λ°λλ½ λ°©μ§
'CS > μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
CPU μ€μΌμ€λ¬ (0) | 2024.02.12 |
---|---|
OSμμ νλ‘μΈμ€ μν (0) | 2024.02.10 |
λͺ¨λν° (0) | 2024.02.08 |
λκΈ°ν, κ²½μ 쑰건, μκ³ μμ (0) | 2024.02.04 |
CPU bound, I/O bound (1) | 2024.02.03 |