First Come First Served
#1 입력
- 첫째 줄 : 입력 받을 스레드 개수
- 각 스레드 별 입력 데이터
- 첫 번째 - 스레드 번호
- 두 번째 - 도착 시간
- 세 번째 - CPU 사용 시간
- 입력 예제
4
0 0 40
1 10 25
2 20 30
3 25 5
#2 출력
- 각 스레드의 대기시간과 완료시간 출력
- 출력 예제
0 40
30 65
45 95
70 100
#3 구현
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct thr {
int num; // 스레드 번호
int start_t; // 스레드 도착 시간
int run; // CPU 사용시간
};
int n; // 입력받을 스레드 개수 저장
vector<pair<int, int>> v; // 대기시간, 완료시간 저장 벡터
queue<thr> ready_q; // 큐에 들어간 스레드
void oper_end() {
int end = 0;
while (!ready_q.empty()) {
thr t = ready_q.front();
if (end < t.start_t) // 만약 이전 스레드 완료 시간보다 도착 시간이 늦을 경우
end = t.start_t; // 도착시간으로 변경
end += t.run; // CPU 사용시간 추가
v.push_back({ end - t.start_t - t.run,end }); // 출력을 위해 대기 시간과 완료 시간을 벡터에 저장
ready_q.pop(); // 완료된 스레드는 큐에서 제거
}
}
int main() {
cin >> n;
thr tmp; // 입력받을 임시 공간
for (int i = 0; i < n; i++) {
cin >> tmp.num >> tmp.start_t >> tmp.run; // 순서대로
ready_q.push(tmp); // 스레드 정보를 큐에 삽입
} // 스레드 정보 입력
oper_end(); // 대기 시간 및 완료 시간 연산
cout << "\\n";
for (int i = 0; i < v.size(); i++) {
cout<< v[i].first << " " << v[i].second << "\\n"; // 대기 시간 및 완료 시간 출력
}
return 0;
}
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] 교착상태 (0) | 2023.07.17 |
---|---|
[운영체제] 스레드 동기화 (0) | 2023.07.16 |
[운영체제] CPU 스케줄링 (0) | 2023.07.11 |
[운영체제] 스레드와 멀티스레딩 (0) | 2023.07.10 |
[운영체제] 프로세스와 프로세스 관리 (1) | 2023.07.09 |