안녕하세요.

BlockDMask 입니다.


오늘은 deadlock 에 대해서 알아볼까 합니다.

deadlock 이 무엇인지, deadlock을 처리하는 전체적인 그림에 대해서 보겠습니다.

뭐가 뭔지 전체적으로 그림이 잡히지 않아서 그려보았습니다.


1. deadlock 이란.?


  • deadlock(교착상태)란 둘 이상의 Process가 서로가 가진 Resource를 요구하면서 각자의 Resource를 놓지 않아서 더이상 작업수행을 할 수 없이 무한하게 대기 상태로 놓인 상태를 말합니다.

  • 멀티프로세스나 멀티스레드 환경에서 여러 프로세스들이 한정된 자원을 사용하기 때문에 발생할 수 있습니다.

  • deadlock은 4가지 필요조건이 성립할때 발생할 수 있습니다. 시스템이 deadlock 상태가 되지 않도록 보장하기 위하여 deadlock을 예방하거나 회피하는 방법을 사용합니다. 그렇지 않으면 시스템이 교착상태가 되도록 허용 한 다음에 탐지 후 회복 시키는 방법이 있습니다. 이것을 그림으로 한번에 보면 아래와 같습니다.


2. deadlock에 관한 전체적인 그림



<참고>

https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C

+ 강의노트

+ Operating System Concept 8th Edition


감사합니다.



저작자 표시 비영리 변경 금지
신고

안녕하세요

BlockDMask 입니다.


별찍기 시리즈의 열번째 입니다.


0. 제목


백준 2447 별찍기10

BOJ 2447 별찍기10

C++ 별찍기 반복문




1. 문제 설명


아래 사진을 보고 별찍는 규칙을 유추한 뒤에 별을 찍어 보시오.


첫째 줄에 N이 주어진다. 

N은 항상 3의 제곱꼴인 수이다.

(1, 3, 9, 27, ...)

(N=3^k, 0<=k<8)





2. 풀이 과정


분할정복(divided and conquer) 방식으로 풀었습니다.


사실 작은 범위 1일때

3일때

9일때의 규칙을 찾아서

그 규칙에 맞게 코드를 짰습니다.



이런식으로 해서 규칙을 찾아서 작성했습니다.

반복문을 이용했습니다.




3. 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//https://www.acmicpc.net/problem/2447
//BOJ_2447_star10
 
#include<iostream>
#include<cstdio>
using namespace std;
 
class star{
private:
    int n;
public:
    star(int n): n(n){}
 
    void callDraw() {
        for(int y=0; y<n; y++){
            for(int x=0; x<n; x++){
                draw(y,x);
            }
            printf("\n");
        }
    }
    void draw(int dy, int dx){
        while(dy!=0){
            if(dy%3==1 && dx%3==1){ //몫을 3으로 나누었을때 나머지가 둘다 나머지 1일때
                printf(" ");
                return;
            }
            dy/=3;  //3으로 나누어 몫을 만든다.
            dx/=3;
        }
        printf("*");
    }
 
};
 
int main(void){
    int n;
    scanf("%d"&n);
    star *= new star(n);
    s->callDraw();
    delete s;
    return 0;
}
cs




4. 인증




<문제출처>

https://www.acmicpc.net/problem/2447


감사합니다.

저작자 표시 비영리 변경 금지
신고

'<문제풀이&연습> > [C++] BAEKJOON' 카테고리의 다른 글

[백준 2447] 별찍기10  (0) 2017.11.22
[백준 2446] 별찍기9  (0) 2017.11.21
[백준 10820] 문자열 분석  (0) 2017.11.21
[백준 2445] 별찍기8  (0) 2017.11.20
[백준 10971] 외판원 순회 2  (0) 2017.11.20
[백준 2444] 별찍기7  (0) 2017.11.15
[백준 1120] 문자열  (0) 2017.11.14

안녕하세요

BlockDMask 입니다.

별찍기 시리즈중 아홉번째 입니다.

171101 문제 빼먹음 -> 171121 완료


0. 제목


백준 2446 별찍기9

BOJ 2446 별찍기9

C++ 별찍기



1. 문제 설명


모래시계 모양으로 별을 찍으면됩니다.




2. 풀이 과정


어제 밤에 했던

2017/11/20 - [<문제풀이&연습>/[C++] BAEKJOON] - [백준 2445] 별찍기8

에서 조금 수정하여

코드를 완성했습니다.



3. 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//https://www.acmicpc.net/problem/2446
//BOJ_2446_star9
 
#include<iostream>
#include<cstdio>
using namespace std;
 
class star{
private:
    int n;
    void draw(int key, bool isStar) const;
    void printStar(bool a) const;
public:
    star(int n):n(n){}
 
    void callDraw(bool diamond) const{
        for(int i=0; i<n-1; i++){
            this->draw(i, diamond);    //위
        }
        for(int i=0; i<n; i++){
            this->draw(n-i-1, diamond);  //아래
        }
    }
 
};
void star::draw(int key, bool isStar) const{
    for(int i=0; i<key; i++) printStar(isStar);
    for(int j=0; j<(2*n)-(2*key)-1; j++) printStar(!isStar);
    //for(int i=0; i<key; i++) printStar(isStar);
    printf("\n");
 
}
void star::printStar(bool a) const{
    if(a) printf(" ");
    else printf("*");
}
 
int main(void){
    int n;
    cin >> n;
    star *= new star(n);
    s->callDraw(true);
    delete s;
    return 0;
}
 
cs



4. 인증




<문제 출처>

https://www.acmicpc.net/problem/2446


감사합니다.

저작자 표시 비영리 변경 금지
신고

'<문제풀이&연습> > [C++] BAEKJOON' 카테고리의 다른 글

[백준 2447] 별찍기10  (0) 2017.11.22
[백준 2446] 별찍기9  (0) 2017.11.21
[백준 10820] 문자열 분석  (0) 2017.11.21
[백준 2445] 별찍기8  (0) 2017.11.20
[백준 10971] 외판원 순회 2  (0) 2017.11.20
[백준 2444] 별찍기7  (0) 2017.11.15
[백준 1120] 문자열  (0) 2017.11.14

+ Recent posts