๊ฐ์ : [์ธํ๋ฐ] C#.NET 0.5๋ ์ฐจ~3๋ ์ฐจ(ํํธ1)
์ค๋ ๋ ๋๊ธฐํ๋
๋๊ธฐํ๋ ๋ ์ด์์ ์ค๋ ๋๊ฐ ์๋ก ์์ ์ ๋ฎ์ง ์๊ณ ๊ณต์ ๋ฆฌ์์ค(์์)์ ์์ ํ๊ฒ ์ก์ธ์คํ ์ ์๋ ๋ฐฉ๋ฒ
์๊ณ ์์ญ(critical section)์ด๋?
๋ฉํฐ ์ค๋ ๋์ ์ํด ๊ณต์ ์์์ด ์๋ก ์ฐธ์กฐ๋ ์ ์๋ ์ฝ๋์ ๋ฒ์ (์ค๋ ๋๊ฐ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋ ์์ญ)

โ ์์ 1


MessageBox์ 4๊ฐ ์๋ 3์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธ
lock ํค์๋
๋ณดํธ์ ์ผ๋ก ๋๊ธฐํ์ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ค.
object lockObj = new object()
lock(lockObj); โ ์ํธ ๋ฐฐ์ ์ ๊ธ์ ํ๋
โ ์์ 2



MessageBox์ 4๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ ํ์ธ

lock ํค์๋ ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
lock(obj)
{
...
lock(obj)
{
...
}
}
์์ ๊ฐ์ด lock ์์ ๋์ผํ ๊ฐ์ฒด์ ์ ๊ธ์ ์์ฒญ ์ deadlock์ด ๋ฐ์ํ ์ ์๋ค. try ~ catch๋ก ์กํ๋ ์๋ฌ๋ ์๊ธฐ ๋๋ฌธ์ ์์ธ์ ํ์ ํ๊ธฐ๋ ์ด๋ ต๋ค.
AutoResetEvent ํค์๋
AutoResetEvent ํค์๋๋ฅผ ํตํด ์ค๋ ๋์ ์์๋ฅผ ์ ์ดํ ์ ์๋ค.
ex) ์ค๋ ๋1์ด ์ ํ๋ ํ ์ค๋ ๋2 ์คํ

โ ์์ 3



Work2()์ Thread.Sleep(5000) ๋ถ๋ถ์ด ์ ํ๋์ด 5์ด ํ์ a๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธ
โ ์์ 4


โ ์์ 5
AutoResetEvent autoResetEvent = new AutoResetEvent(true);
๋ง์ฝ ์ฌ๊ธฐ์ AutoResetEvent์ ์ธ์๋ฅผ false๊ฐ ์๋ true๋ก ์ฃผ๊ฒ ๋๋ค๋ฉด, ์ฒซ ๋ฒ์งธ ์ ํธ๋ ๋ฐ์ ์ํ๋ก ์์ํ๋ค.


โ ์์ 6



์ฐธ๊ณ ์๋ฃ:
- https://codedragon.tistory.com/3529
'Programming > C# & .NET' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C# ํ๋ก๊ทธ๋๋ฐ] 4. ๋น๋๊ธฐ(2) (0) | 2021.07.19 |
|---|---|
| [C# ํ๋ก๊ทธ๋๋ฐ] 3. ๋น๋๊ธฐ, ๋๊ธฐ (0) | 2021.07.08 |
| [C# ํ๋ก๊ทธ๋๋ฐ] 1. ๋ฉํฐ์ค๋ ๋ (0) | 2021.07.08 |
| [ํ๋ก๊ทธ๋๋ฐ] ํ๋ก์ธ์ค์ ์ค๋ ๋ (0) | 2021.07.06 |