미새문지

크래프톤 정글 week07, day59 - 잔디심기, alarm-simultaneous 구현 본문

크래프톤 정글/TIL

크래프톤 정글 week07, day59 - 잔디심기, alarm-simultaneous 구현

문미새 2024. 3. 7. 01:25
728x90

오늘의 잔디심기

백준
2523
자바스크립트
브론즈3
별 찍기 13
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split("\n");

const n = Number(input[0]);
const star = '*';

for (let i = 1; i <= n; i++) {
    let result = '';
    for (let j = 0; j < i; j++) {
        result += star;
    }
    console.log(result);
}
for (let i = n - 1; i > 0; i--) {
    let result = '';
    for (let j = 0; j < i; j++) {
        result += star;
    }
    console.log(result);
}

오늘도 열심히 pintOS 죽쑤느라 간단한 문제로 잔디 심기 완료

재남씨가 맡긴 alarm-simultaneous 테스트 구현 완료. 이 부분은 일정 시간 후 쓰레드를 깨우는 부분을 수정함으로 써 해결됐다.

// void thread_wakeup(int64_t ticks){
// 	if (list_empty(&sleep_list)){
// 		return;
// 	}
// 	const struct list_elem *waking_up;
// 	waking_up = list_front(&sleep_list);
// 	enum intr_level old_level;
// 
// 	if (checker->sleep_ticks <= (ticks + timer_ticks ())){
// 		waking_up = list_pop_front(&sleep_list);
// 		old_level = intr_disable();
// 		list_push_back(&ready_list, waking_up);
// 		// list_insert_ordered(&ready_list, waking_up, value_less, NULL);
// 		intr_set_level(old_level);
// 	}
// }

void thread_wakeup(int64_t ticks) {
  enum intr_level old_level;
  old_level = intr_disable();

  while (!list_empty(&sleep_list)) {
    struct list_elem *waking_up = list_front(&sleep_list);
    struct thread *checker = list_entry(waking_up, struct thread, elem);

    if (checker->sleep_ticks <= (ticks)) {
      waking_up = list_pop_front(&sleep_list);
      list_push_back(&ready_list, waking_up);
    } else {
      break;
    }
  }

주석 처리된 기존의 thread_wakeup은 하나의 쓰레드를 받는 형식으로 작성되어 있지만,  simultaneous 에서는 동시에 쓰레드를 가져와야 하기 때문에 while문으로 한번에 묶어 ticks값을 안에서 if로 체크했다. 함수 하나 수정으로 깔끔하게 해결되니 기분이 너무 좋다.

그리고 재남씨와 에린씨가 벽을 뚫고 donation 부분 테스트들을 쭉 통과했다. 둘 다 구현 너무 잘한다.

하지만 관련 테스트 중 donate-multiple에 막혀버렸다. 계속 고민하다가 결국 각자 따로 작성해보고 모이기로 했는데 쓰레드 리스트가 아닌 lock의 리스트를 가져와야 했기 때문에 새로 lock_list를 작성해주고 acquire과 release 함수를 계속 수정해봤지만 진전은 없었다. 오늘 되는데까지 하고 내일 풀 컨디션으로 쭉 달릴 예정

 

학습 시간 : 10 ~ 26시

728x90