[OS]Thread Synchronization

soheeยท2022๋…„ 9์›” 28์ผ
0

๐Ÿ“Œ ์˜ค๋Š˜์€ ์Šค๋ ˆ๋“œ์˜ ๋™๊ธฐํ™”์— ๋Œ€ํ•ด ์ ์–ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.๐Ÿง ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ถ”ํ›„์— ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

Thread Synchronization

์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์Šค๋ ˆ๋“œ 2๊ฐœ ์ด์ƒ์ด ๊ณต์œ  ๋ฐ์ดํ„ฐ(stack์„ ์ œ์™ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ์ž‘์—…๋“ค์„ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”๋ผ๊ณ  ํ•œ๋‹ค.
์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด์„œ ์ž„๊ณ„์˜์—ญ๊ณผ ๋ฝ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ž„๊ณ„์˜์—ญ(critical section): ์ž„๊ณ„์˜์—ญ์œผ๋กœ ์„ค์ •ํ•œ ๊ตฌ์—ญ์€ 2๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ณต์œ  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹
  • ๋ฝ(lock): ๋ฝ์„ ํš๋“ํ•œ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ์‹

๋™๊ธฐํ™” ๊ธฐ๋ฒ•

  • ๋ฎคํ…์Šค(mutex): ๊ณต์œ  ์ž์›์ด๋‚˜ ์ž„๊ณ„์˜์—ญ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผ ํ•˜๋„๋ก ํ—ˆ์šฉ(๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•œ๊ฐœ)

    ์Šค๋ ˆ๋“œ๋“ค์€ ์‹คํ–‰์‹œ๊ฐ„์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๋‹จ๋…์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์ด๋ฅผ ์ƒํ˜ธ๋ฐฐ์ œ(Mutual Exclution)๋ผ๊ณ  ํ•œ๋‹ค.

  • ์„ธ๋งˆํฌ์–ด(semaphore): ๊ณต์œ  ์ž์›์ด๋‚˜ ์ž„๊ณ„์˜์—ญ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œ(๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•œ๊ฐœ ์ด์ƒ)

    ์„ธ๋งˆํฌ์–ด์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์€ ์ฒ˜๋ฆฌ ๋„์ค‘์— ์ธํ„ฐ๋ŸฝํŠธ ๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ์„ธ๋งˆํฌ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ P(wait)์—ฐ์‚ฐ๊ณผ V(signal)์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค. V ์—ฐ์‚ฐ์€ ํ์— ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นจ์šฐ๋Š” ์‹ ํ˜ธ์ด๋ฉฐ, P ์—ฐ์‚ฐ์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž„๊ณ„์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ง„์ž… ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์กฐ์ž‘์ด๋‹ค.

  • ์ด๋ฒคํŠธ(event): ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋™๊ธฐํ™” ํ•œ๋‹ค.

synchronized๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™”

์ž๋ฐ”์—์„œ๋Š” synchronized๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„๊ณ„์˜์—ญ์„ ์ง€์ •ํ•œ๋‹ค.

  • ๋ฉ”์†Œ๋“œ ์ „์ฒด๋ฅผ ์ž„๊ณ„์˜์—ญ์œผ๋กœ ์ง€์ •: ๋ฉ”์†Œ๋“œ ์„ ์–ธ ์‹œ syncronized ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€
public synchronized void Method() {	

}
  • ํŠน์ • ์˜์—ญ๋งŒ ์ž„๊ณ„์˜์—ญ์œผ๋กœ ์ง€์ •: synchronized ํ‚ค์›Œ๋“œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ธ”๋ก ์ง€์ •
public void normalMethod() {	
	synchronzied(/* ๋™๊ธฐํ™”ํ•  ๊ฐ์ฒด ๋˜๋Š” ํด๋ž˜์Šค๋ช… */) {	}
}
profile
๊ธฐ์–ตํ•˜๋ ค๊ณ  ์ ๋Š” ๊ฐœ๋ฐœ ๋กœ๊ทธ๐ŸŒž

0๊ฐœ์˜ ๋Œ“๊ธ€