//////
Search
📒

Process(MultiThread)

1. 소스코드

#include <stdio.h> #include <stdlib.h> #include <time.h> #define SIMULATION_COUNT 1000 #define WORKING_TIME 3600 // 1 hour in seconds #define INTERVAL 15 // 15 seconds interval for new tasks typedef enum { A = 12, B = 15, C = 24 } Task; Task generate_random_task() { int rand_value = rand() % 3; if (rand_value == 0) return A; if (rand_value == 1) return B; return C; } int simulate_cpu(int queue_length) { int time = 0; int queue[queue_length]; int queue_start = 0, queue_end = 0, queue_size = 0; int task_time_left = 0; while (time < WORKING_TIME) { // 15초마다 새 Task 생성 if (time % INTERVAL == 0) { Task new_task = generate_random_task(); // 큐 길이보다 큐 사이즈가 작으면 큐에 Task 넣기 if (queue_size < queue_length) { queue[queue_end] = new_task; queue_end = (queue_end + 1) % queue_length; queue_size++; } else { return 0; // 작업 드롭, 실패 } } // 현재 작업이 없으면 큐에서 새 작업 가져오기 if (task_time_left == 0 && queue_size > 0) { task_time_left = queue[queue_start]; queue_start = (queue_start + 1) % queue_length; queue_size--; } // 작업이 진행 중이면 남은 시간 감소 if (task_time_left > 0) { task_time_left--; } // 시간이 흐름 time++; } // 시뮬레이션 종료 시 대기 큐와 남은 작업 확인 return (queue_size == 0 && task_time_left == 0); // 작업이 모두 처리되었으면 성공 } int main() { srand(time(NULL)); int success_count; int queue_length = 1; while (1) { success_count = 0; for (int i = 0; i < SIMULATION_COUNT; i++) { if (simulate_cpu(queue_length)) { success_count++; } } float success_rate = (float)success_count / SIMULATION_COUNT * 100; printf("Queue Length: %d, Success Rate: %.2f%%\n", queue_length, success_rate); if (success_rate >= 90.0) { printf("Minimum queue length with at least 90%% success rate: %d\n", queue_length); break; } queue_length++; } return 0; }
C
복사

2. 실행결과

Type A

Type B

3. 고찰

Type B에 대해서 문제를 잘 못 알아들은 것 같습니다 또한, 어떤 부분 때문에 계속 문제가 발생하는지 지점을 찾지를 못하겠어서 B는 해결하지 못한채 제출하게 되었습니다. 답을 알 수 있다면 좋을 것 같습니다