42seoul/projects

[Philosophers] ๊ฐœ๋…์ •๋ฆฌ

2021. 9. 4. 15:42

์šฉ์–ด ์ •๋ฆฌ


์Šค๋ ˆ๋“œ(Thread)

์ฒ ํ•™์ž.

ํ๋ฆ„์˜ ๋‹จ์œ„. ๋™์ž‘์„ ํ•˜๋Š” ๊ฒƒ.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(multithread)

์—ฌ๋Ÿฌ ๋ช…์˜ ์ฒ ํ•™์ž.

ํ”„๋กœ์„ธ์Šค์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ, ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

์–ธ์–ด์— ๋”ฐ๋ผ ํŠน์„ฑ์— ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ

์˜ˆ์ธก์ด ์–ด๋ ค์›Œ์„œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค.

๋ฎคํ…์Šค(Mutex)

ํฌํฌ.

ํ•œ์ •๋˜์–ด์žˆ๋Š” ๊ณต์œ ์ž์›์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ๋ถ„ํ•ด์„œ ์‚ฌ์šฉ์„ ํ•  ๊ฒƒ์ธ์ง€, ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ.

key๊ฐ’์„ ์ค˜์„œ ํ• ๋‹น์‹œํ‚ค๋Š” ๋ฐฉ์‹.

๋จน๊ธฐ ์œ„ํ•ด์„  ๋ฎคํ…์Šค๊ฐ€ 2๊ฐœ๊ฐ€ ํ•„์š”๋กœ ํ•˜๊ณ , ์˜†์ž๋ฆฌ์— ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉด

๋‚˜๋Š” ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋ฎคํ…์Šค๊ฐ€ ์ƒ๊ธฐ๋ฉด ๊ทธ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰. ํฌํฌ (๋ฎคํ…์Šค)๋ฅผ 2๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ๋งŒ ์ฒ ํ•™์ž๋“ค์€ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค. (์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ž‘๋œ๋‹ค.)

์„ธ๋งˆํฌ์–ด(Semaphore)

๋ฎคํ…์Šค์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ตœ๋Œ€ํ•œ๋„๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹.

 


๊ตฌํ˜„ ์ •๋ฆฌ

 

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ (Thread)

์ฒ ํ•™์ž๋“ค์ด ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๋„๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿด ๋•Œ ์ฒ ํ•™์ž๋“ค์ด ์‚ด์•˜๋Š”์ง€ ์ฃฝ์—ˆ๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌํ•ด์ฃผ๋Š” ๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•œ๋‹ค.

./philo 1 500 300 200

ํ˜•์‹์œผ๋กœ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ ํฌํฌ๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์œผ๋‹ˆ ์ฒ ํ•™์ž๋Š” ํฌํฌ๋ฅผ ์žก์ง€ ๋ชปํ•˜์—ฌ ๋ฌดํ•œํžˆ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.

์ด๋Ÿด ๋•Œ ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ์ƒ์กด์‹œ๊ฐ„์„ ๋น„๊ตํ•˜์—ฌ ์‚ด์•„์žˆ๋Š”์ง€ ์ฃฝ์—ˆ๋Š”์ง€ ํŒ๋ณ„์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

ํŒ๋ณ„ ์ž์ฒด๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ง‘์„ ํฌํฌ๊ฐ€ lock ์ƒํƒœ๋ผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  1. ์•„์˜ˆ ํฌํฌ๋ฅผ ์ง‘์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ๋‹ค.
  2. ํฌํฌ์— ๋Œ€ํ•œ ๊ฐ’์„ ์•„์˜ˆ ๋‹ค๋ฅด๊ฒŒ ๋„ฃ์–ด๋ฒ„๋ฆฐ๋‹ค.

 

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ 1

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ๋ฅผ 1๊ฐœ๋งŒ ์ƒ์„ฑํ•ด์„œ

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ 1๊ฐœ๊ฐ€ ๋ชจ๋“  ์ฒ ํ•™์ž๋“ค์ด ์‚ด์•˜๋Š”์ง€ ์ฃฝ์—ˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ์‹.

 

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ n ( ์ฒ ํ•™์ž์˜ ์ˆ˜ )

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ฒ ํ•™์ž์˜ ์ˆ˜๋งŒํผ ์ƒ์„ฑ์„ ํ•ด์„œ

์ฒ ํ•™์ž๋งˆ๋‹ค ๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋„๋Š” ๋ฐฉ์‹.

number_of_times_each_philospher_must_eat ๋ผ๋Š” ์ธ์ž๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ ์ตœ์†Œ ํšŸ์ˆ˜์˜ ์‹์‚ฌ๊ฐ€
๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ๋ชจ๋“  ์ฒ ํ•™์ž๋“ค์ด ์ตœ์†Œ ํšŸ์ˆ˜ ์ด์ƒ์”ฉ ๋จน์—ˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด์ค˜์•ผ ํ•˜๊ณ  ์ตœ์†Œ ํšŸ์ˆ˜์˜ ์‹์‚ฌ๋ฅผ ํ•ด๋„
๋‹ค๋ฅธ ์ฒ ํ•™์ž๊ฐ€ ์ตœ์†Œ๋งŒํผ ๋จน์ง€ ์•Š์•˜๋‹ค๋ฉด ๋จน๋Š” ๊ฒƒ์„ ๋ฉˆ์ถฐ์„œ๋Š” ์•ˆ ๋œ๋‹ค.

๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ๋ฅผ n ๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋งŒ ๋กœ์ง์„ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ์—๋Š”
๋ชจ๋“  ์ฒ ํ•™์ž๋“ค์ด ์ตœ์†Œ ํšŸ์ˆ˜๋งŒํผ ๋จน์—ˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด์ฃผ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”๋œ๋‹ค.

์ „์ฒด์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋“ค๋งŒ ํ•˜๋„๋ก ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์–ด์„œ
must_eat ํšŸ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” ์Šค๋ ˆ๋“œ 1๊ฐœ.

๊ฐ๊ฐ์˜ ์ฒ ํ•™์ž๋“ค์ด ์ฃฝ์—ˆ๋Š”์ง€ ์‚ด์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์Šค๋ ˆ๋“œ. n๊ฐœ

2 ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์‚ฌ์šฉ.


pthread_detach, pthread_join ์ฐจ์ด์ 

๊ณตํ†ต์  : ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ๋œ ์ž์›์— ๋Œ€ํ•ด์„œ ์ฆ‰์‹œ free๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

์ฐจ์ด์  : join์€ value_ptr์œผ๋กœ ๊ฐ’์„ ์ถ”๊ฐ€๋กœ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ( ์Šค๋ ˆ๋“œ ์‹๋ณ„๋ฒˆํ˜ธ )

pthread_detach์— ๊ฒฝ์šฐ์—๋Š” main์ด ๋๊นŒ์ง€ ๋„๋‹ฌํ•˜์˜€๋‹ค๋ฉด ๋ฐ”๋กœ ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ  ์ข…๋ฃŒํ•˜์ง€๋งŒ,
pthread_join์— ๊ฒฝ์šฐ์—๋Š” main ๋„์ค‘ join์— ๊ฑธ๋ฆฌ๋ฉด ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ์ž์›์„ ๋ฐ˜๋‚ฉํ•  ๋•Œ๊นŒ์ง€
๊ธฐ๋‹ค๋ฆฐ๋‹ค.

์Šค๋ ˆ๋“œ ๋™์ž‘ ์›๋ฆฌ.

pthread_create์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋Š” ์ƒ์„ฑ์ด ๋˜์ง€๋งŒ ๊ทธ์™€ ๋™์‹œ์— main๋ฌธ๋„ ๋™์ž‘์„ ํ•˜๊ณ  ์žˆ์–ด์„œ

์ •ํ™•ํ•œ ํ™•์ธ์ด ์–ด๋ ต๋‹ค.

main๋ฌธ์—์„œ pthread_join ๋“ฑ main๋ฌธ์— join์„ ๊ฑฐ๋Š” ํ˜•์‹์œผ๋กœ ์Šค๋ ˆ๋“œ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

usleep ์‚ฌ์šฉ ์ด์œ ..?

์ž๊ฑฐ๋‚˜ ๋จน์„ ๋จน๋Š” ์‹œ๊ฐ„์„ ์ฆ ๊ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ.

// ํ˜„์žฌ ์‹œ๊ฐ„ ๊ณ„์‚ฐ.

gettimeofday(&start, NULL);
usleep(2000);
gettimeofday(&end, NULL);

seconds  = end.tv_sec  - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;

์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ์ฐจ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐ.

 

 


usleep ์‹œ๊ฐ„ ๋ฐ€๋ฆผ ๋ฌธ์ œ

while (!philo->info->die_or_life)
    {
        philo_forks(philo);
        philo_eat(philo);
        philo_unforks(philo);
        philo_sleep(philo);
        philo_think(philo);
    }
    return (NULL);
// usleep ์ž์ฒด์—์„œ ๋ณด์žฅํ•ด์ฃผ๋Š” ์‹œ๊ฐ„์— ์˜ค์ฐจ๊ฐ€ ๋งŽ์ด ์ƒ๊ฒจ 
// ์ถ”๊ฐ€์ ์œผ๋กœ vsleep์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ.
void    vsleep(unsigned int time)
{
    unsigned int    finish_time;

    finish_time = time + now_time();
    while (finish_time > (unsigned int)now_time())
    {
        usleep(100);
    }
}

philo_loop ์•ˆ์—์„œ usleep์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„ (to_die, to_eat)์„ ์ œ์™ธํ•˜์—ฌ๋„
loop ๋‚ด๋ถ€์—์„œ ๋กœ์ง์ด ๋Œ์•„๊ฐ€๋ฉด์„œ ์‹œ๊ฐ„์ด ๊ณ„์† ํ๋ฅด๊ธฐ๋„ ํ•˜๊ณ  vsleep์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ์„ ํ•ด๋„ ๋‚ด๋ถ€์—์„œ๋Š” usleep์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ ์ฃฝ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ผ๋„ ์ฒ ํ•™์ž๊ฐ€ ์ฃฝ๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ์˜ค๋ž˜ ๋Œ์•„๋„ ๋กœ์ง์ด ์œ ์ง€๋˜๋„๋ก ์‹œ๊ฐ„์„ ๋ณด์ •ํ•ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

 

revision_time = current - 100;
๋งˆ์ง€๋ง‰ ์‹์‚ฌ์‹œ๊ฐ„ = ํ˜„์žฌ์‹œ๊ฐ„ - x ms
eat_time , sleep_time

eat์„ ์ง„ํ–‰ํ•˜์—ฌ usleep์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค๋ฉด eat ๋‹ค์Œ ๋‹จ๊ณ„์ธ sleep ํŒŒํŠธ์—์„œ
๋งˆ์ง€๋ง‰ ์‹์‚ฌ์‹œ๊ฐ„์— ์‹œ๊ฐ„์„ ๋ณด์ •ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์ค€๋‹ค.

 


์Šค๋ ˆ๋“œ์˜ ๋™์ž‘๋ฐฉ๋ฒ•

๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ ๋น ๋ฅธ ์†๋„๋กœ ๋™์ž‘์„ ํ™œ์„ฑํ™”ํ•ด์ค˜์„œ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋ž˜์„œ

๋งŽ์€ philo์˜ ์ˆ˜๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ์—๋Š” ์ปดํ“จํ„ฐ ์ž์ฒด์—์„œ ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ•˜๊ณ  ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

void    vsleep(unsigned int time)
{
    unsigned int    finish_time;

    finish_time = time + now_time();
    while (finish_time > (unsigned int)now_time())
    {
        usleep(n);
    }
}

vsleep ํ˜•์‹์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ ๊ฒƒ์— usleep์— n ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๋ช‡ ๋ช…์˜ ์ฒ ํ•™์ž๊ฐ€ ๋“ค์–ด์™”๋Š”์ง€์— ๋”ฐ๋ผ ์ตœ์ ํ™” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์ฃผ๋ฉด ๋งŽ์€ ์ˆ˜์˜ ์ฒ ํ•™์ž์˜ ์ˆ˜๊ฐ€ ๋“ค์–ด์™€๋„ ์•ˆ ์ฃฝ์„ ์ˆ˜ ์žˆ๋‹ค.

 


ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ก€ ์ผ€์ด์Šค๋“ค.

./philo 4 410 200 200
// ๋ฌดํ•œ์ด ๋Œ์•„์•ผํ•œ๋‹ค.

./philo 4 390 200 200 5
// ์ฃฝ์–ด์•ผํ•œ๋‹ค. 
// ( segfault check )

./philo 1 1000 300 200
// ์ƒ์กด ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— ์ฃฝ์–ด์•ผํ•œ๋‹ค.
// ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋„๋Š”์ง€ ํ™•์ธ.

./philo 1 1000 300 200 5
// ์ƒ์กด ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— ์ฃฝ์–ด์•ผํ•œ๋‹ค.
// ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋„๋Š”์ง€ ํ™•์ธ.
// ( segfault check )

// ์™„๋ฒฝ์ถ”๊ตฌ ===================================== 

./philo 4 400 200 200
// ๋ฌดํ•œ์ด ๋Œ์•„์•ผํ•œ๋‹ค.
// ์‹œ๊ฐ„์ด ๋”ฑ ๋งž์œผ๋ฏ€๋กœ ์ฃฝ์ง€์•Š์•„์•ผํ•œ๋‹ค.

./philo 4 399 200 200
// ์ฃฝ์–ด์•ผํ•œ๋‹ค. 
// ( ํ™€์ง์œผ๋กœ ํฌํฌ๋ฅผ ์ง‘์„๋•Œ ๋ฐ˜๋ก€์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜์˜€๋Š”์ง€ ํ™•์ธ )

 

 

 

'42seoul > projects' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CPP Module] 00  (3) 2021.09.15
[C++] Orthodox Canonical Form  (1) 2021.09.14
[Philosophers] ์‚ฌ์šฉ ํ•จ์ˆ˜ ์ •๋ฆฌ  (1) 2021.09.03
[ft_services] ๋ช…๋ น์–ด ์ •๋ฆฌ  (2) 2021.09.02
[ft_services] ๊ฐœ๋… ์ •๋ฆฌ  (1) 2021.09.01
  1. ์Šค๋ ˆ๋“œ(Thread)
  2. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(multithread)
  3. ๋ฎคํ…์Šค(Mutex)
  4. ์„ธ๋งˆํฌ์–ด(Semaphore)
  5. ๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ (Thread)
  6.  
  7. ๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ 1
  8. ๋ชจ๋‹ˆํ„ฐ ์Šค๋ ˆ๋“œ n ( ์ฒ ํ•™์ž์˜ ์ˆ˜ )
  9. pthread_detach, pthread_join ์ฐจ์ด์ 
  10. ์Šค๋ ˆ๋“œ ๋™์ž‘ ์›๋ฆฌ.
  11. usleep ์‹œ๊ฐ„ ๋ฐ€๋ฆผ ๋ฌธ์ œ
  12. ์Šค๋ ˆ๋“œ์˜ ๋™์ž‘๋ฐฉ๋ฒ•
  13. ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ก€ ์ผ€์ด์Šค๋“ค.
moaoh
moaoh
๋‚˜์˜ ์„ฑ์žฅ ์ผ๊ธฐ.
๐Ÿถ ๐Ÿพ๋‚˜์˜ ์„ฑ์žฅ ์ผ๊ธฐ.
moaoh
๐Ÿถ ๐Ÿพ
moaoh
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • Github
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Algorithm
      • ๊ฐœ๋…์ •๋ฆฌ
      • ๋ฌธ์ œํ’€์ด
    • 42seoul
      • projects
    • CS
    • programming language
      • C++
      • Javascript
      • Go
      • Python
      • Front-end
      • Java
    • Java Spring
    • git
    • ์ผ์ƒ
      • ์ฑ… ์ฝ๊ธฐ

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ
moaoh
[Philosophers] ๊ฐœ๋…์ •๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.