π’ 8. Thread & Lock
𫧠λκΈ°νμ λ½
- μ΄λ€ νλ‘μΈμ€ μμμ μμ±λ μ€λ λλ€μ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ 곡μ ν¨
- μ€λ λκ° μλ‘ λ°μ΄ν°λ₯Ό 곡μ ν μ μμ
- λ μ€λ λκ° κ°μ μμμ λμμ λ³κ²½νλ κ²½μ°λ λ¬Έμ κ° λλ€
- synchronized
- 곡μ μμμ λν μ κ·Όμ μ μ΄ν¨
- λ½
- μΈλ°νκ² λκΈ°νλ₯Ό μ μ΄ν¨
- λ½μ 곡μ μμμ λΆμ΄λ©΄ ν΄λΉ μμμ λν μ κ·Όμ λκΈ°ν ν μ μλ€
- μ€λ λκ° ν΄λΉ μμμ μ κ·Όνλ €λ©΄ μ°μ κ·Έ μμμ λΆμ΄ μλ λ½μ νλ ν΄μΌ ν¨
- νΉμ μμ μ λ½μ μ₯κ³ μμ μ μλ μ€λ λλ νλ λΏ
- ν΄λΉ 곡μ μμμ ν λ²μ ν μ€λ λλ§ μ¬μ©μ΄ κ°λ₯
- κ΅μ°©μνμ κ΅μ°©μν λ°©μ§
- 첫 λ²μ§Έ μ€λ λλ λ λ²μ§Έ μ€λ λκ° λ€κ³ μλ κ°μ²΄μ λ½μ΄ ν리기λ₯Ό κΈ°λ€λ¦¬κ³ μκ³ , λ λ²μ§Έ μ€λ λ μμ 첫 λ²μ§Έ μ€λ λκ° λ€κ³ μλ κ°μ²΄μ λ½μ΄ ν리기λ₯Ό κΈ°λ€λ¦¬λ μν©
- λͺ¨λ μ€λ λκ° λ½μ΄ ν리기λ₯Ό κΈ°λ€λ¦¬κ³ μκΈ° λλ¬Έμ, 무ν λκΈ° μνμ λΉ μ§κ² λ¨
- μνΈ λ°°μ²΄ (Mutual exclusion) : ν λ²μ ν νλ‘μΈμ€λ§ 곡μ μμμ μ¬μ©ν μ μλ€
- λ€κ³ κΈ°λ€λ¦¬κΈ° (Hold and wait) : 곡μ μμμ λν μ κ·Ό κΆνμ κ°κ³ μλ νλ‘μΈμ€κ°, κ·Έ μ κ·Ό κΆνμ μ보νμ§ μμ μνμμ λ€λ₯Έ μμμ λν μ κ·Ό κΆνμ μꡬν μ μλ€
- μ μ·¨ (Preemption) λΆκ°λ₯ : ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ μμ μ κ·Ό κΆνμ κ°μ λ‘ μ·¨μν μ μλ€
- λκΈ° μνμ μ¬μ΄ν΄ (Circular wait) : λ κ° μ΄μμ νλ‘μΈμ€κ° μμ μ κ·Όμ κΈ°λ€λ¦¬λλ°, κ·Έ κ΄κ³μ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ€
𫧠CμΈμ΄μ C++
- ν΄λμ€μ μμ
- C++ μμ λͺ¨λ λ°μ΄ν° λ©€λ²μ λ©μλλ κΈ°λ³Έμ μΌλ‘ private
- μμ±μμ μλ©Έμ
- μμ±μλ κ°μ²΄κ° μμ±λλ©΄ μλμΌλ‘ νΈμΆλλ€
- μμ±μκ° μ μλμ΄ μμ§ μμΌλ©΄ μ»΄νμΌλ¬λ κΈ°λ³Έ μμ±μλΌκ³ λΆλ¦¬λ μμ±μλ₯Ό μλμΌλ‘ λ§λ λ€
1 2 3
Person ( int a : id(a) { ... }
- λ°μ΄ν° λ©€λ²μ id λ μ€μ κ°μ²΄κ° λ§λ€μ΄μ§κΈ° μ , μμ±μ μ½λμ λλ¨Έμ§ λΆλΆμ΄ μ€νλκΈ° μ μ κ°μ ν λΉλ°λλ€
- μλ©Έμλ κ°μ²΄κ° μλ©Έλ λ μλμΌλ‘ νΈμΆλλ©°, κ°μ²΄λ₯Ό μμ νλ μμ
μ λ΄λΉνλ€
- λͺ
μμ μΌλ‘ νΈμΆν μ μλ λ©μλκ° μλλ―λ‘, μΈμλ₯Ό μ λ¬ν μ μλ€
1 2 3
~Person() { delete obj; }
- λͺ
μμ μΌλ‘ νΈμΆν μ μλ λ©μλκ° μλλ―λ‘, μΈμλ₯Ό μ λ¬ν μ μλ€
κ°μ ν¨μ
- λΆλͺ¨ ν΄λμ€μ μ΄λ€ λ©μλλ₯Ό ꡬνν΄ λ μ μλ κ²½μ°μλ κ°μ ν¨μλ₯Ό μ¬μ©νλ€
- μμ κ°μ ν¨μλ‘ μ μΈνμ¬ κ·Έ ꡬνμ νμ ν΄λμ€λ€μκ² λ§‘κ²¨μΌ νλ€
- addCourse λ₯Ό μμ κ°μ ν¨μλ‘ μ μΈνμμΌλ―λ‘, Person ν΄λμ€λ μ€μ€λ‘ κ°μ²΄λ₯Ό λ§λ€μ΄ λΌ μ μλ μΆμ ν΄λμ€κ° λλ€
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
class Person { int id; char name[Name_size]; public: virtual void aboutMe() { cout << "I am a person" << endl; } virtual bool addCourse(string s) = 0; }; class Student : public Person { public: void aboutMe() { cout << "I am a Student|"" << endl; } bool addCourse(string s) { cout << "Added course" << s << " to student " << endl; return true; } }; int main() { Person *p = new Student(); p -> aboutMe(); p -> addCourse("History"); delete p; }
- κ°μ μλ©Έμ
- κ°μ ν¨μμ κ°λ μμλΆν° μμ°μ€λ½κ² μ λν μ μλ€
- κΈ°λ³Έκ°
- ν¨μλ₯Ό μ μΈν λΌ κΈ°λ³Έκ°μ λͺ μν μ μλ€
- κΈ°λ³Έκ°μ λ°λμ ν¨μ μ μΈμ μ°μΈ‘ λΆλΆμ λμ¬μΌ νλ€
1 2 3 4 5
int func(int a, int b = 3) { x = a; b = b; return a * b; }
- μ°μ°μ μ€λ²λ‘λ©
- μ°μ°μλ₯Ό κ°μ²΄κ° μ°μ°μλ μ¬μ©ν μ μλ€
- ν¬μΈν°μ μ°Έμ‘°
- ν¬μΈν°λ λ³μμ μ£Όμλ₯Ό λ΄λ λ³μ
- λ³μμ κ°μ μ½κ±°λ λ³κ²½νλ λ± λ³μμ μ μ© κ°λ₯ν μ°μ°μ λͺ¨λ ν¬μΈν°λ₯Ό ν΅ν΄ ν μ μλ€
- λ ν¬μΈν°κ° κ°μ μ£Όμλ₯Ό κ°λ¦¬ν€λ κ²½μ°μ ν ν¬μΈν°κ° κ°λ¦¬ν€λ λ³μμ κ°μ λ³κ²½νλ©΄ λ€λ₯Έ ν¬μΈν°κ° κ°λ¦¬ν€λ λ³μμ κ°λ λ°λλ€
- μ°Έμ‘°
- λ³λμ λ©λͺ¨λ¦¬λ₯Ό κ°μ§ μλλ€-
- μ°Έμ‘°λ null μ΄ λ μ μμΌλ©°, λ€λ₯Έ λ©λͺ¨λ¦¬μ μ¬ν λΉ λ μλ μλ€
- ν¬μΈν° μ°μ°
- p++ λ₯Ό μ€ννλ©΄ pλ size(int) λ°μ΄νΈ
- ν
νλ¦Ώ
- νλμ ν΄λμ€λ₯Ό μλ‘ λ€λ₯Έ μ¬λ¬ νμ μ μ¬μ¬μ©ν μ μλλ‘ ν¨
- μ¬λ¬ νμ μ κ°μ²΄λ₯Ό μ μ₯ν μ μλ μ°κ²°λ¦¬μ€νΈμ κ°μ μλ£κ΅¬μ‘°λ₯Ό λ§λ€ μ μλ€
This post is licensed under CC BY 4.0 by the author.