응용 프로그램을 구현할 때 multiprocess 와 multithread 중 하나를 선택하는 기준은 어떤 것이 있는지 몇 가지 제시하세요.
[답안]

데드락을 해결하기 위한 전략을 두 가지 이상 설명하십시오.
[답안]
데드락 해결 전략
Semaphore와 Mutex의 특징과 주요 차이점은 무엇인가요?
[답안]
Semaphore
Semaphore는 공유 자원에 대한 접근을 제한하는 데 사용되며, 이는 특정 숫자로 초기화됩니다. 이 숫자는 동시에 해당 자원에 접근할 수 있는 스레드의 최대 수를 나타냅니다. 이러한 숫자는 스레드가 자원을 사용할 때마다 감소하고, 자원을 해제할 때마다 증가합니다.
Mutex (Mutual Exclusion)
Mutex는 공유 자원에 대한 접근을 단일 스레드에게만 허용합니다. 이는 주로 데이터의 무결성을 보호하기 위해 사용되며, 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 합니다. 소유권 개념을 가지고 있어, 잠금을 건 스레드만이 잠금을 해제할 수 있습니다.
→ 이 두 가지 메커니즘은 모두 동시성을 관리하고 데이터 무결성을 보장하는 데 필수적이지만, 사용되는 상황과 목적에 따라 선택됩니다. Mutex는 보다 엄격한 제어가 필요할 때, Semaphore는 여러 자원에 대한 동시 접근을 허용할 때, 특히 Counting Semaphore는 자원의 수량이 제한되어 있을 때 유용합니다.
다음 ANSI C 프로그램에서 출력되는 내용은 무엇인가요?
#include <stdio.h>
int f(int x, int *py, int **ppz)
{
int y, z;
**ppz += 1;
z = **ppz;
*py += 2;
y = *py;
x += 3;
return x + y + z;
}
int main()
{
int c, *b, **a;
c = 4;
b = &c;
a = &b;
printf("%d\n" , f(c, b, a));
return 0;
}
[답안]
f(c, b, a)는 return x + y + z 와 같으므로 각각의 수를 구해야한다.
**ppz는 4 + 1 = 5 이다. → z = 5이다.
*py는 더블 포인터에 따라 **ppz + 2 이므로 5 + 2 = 7 이다. → y = 7 이다.
x는 c값에 += 3을 한 것이므로 4+3 = 7이다. → x = 7 이다.
그러므로 5 + 7 + 7 = 19 로 정답은 19가 맞다.
답: 19
다음 C 코드에서 발생하는 메모리 누수(memory leak)를 찾고, 해결 방안을 제시하세요.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
char *description;
} item;
item* create_item(int data, const char *desc) {
item *new_item = (item *)malloc(sizeof(item));
if (new_item == NULL) {
return NULL;
}
new_item->data = data;
new_item->description = (char *)malloc(strlen(desc) + 1);
strcpy(new_item->description, desc);
return new_item;
}
int main() {
item *myItem = create_item(5, "Test Item");
printf("Item: %d, Description: %s\n", myItem->data, myItem->description);
// 다른 작업 수행
free(myItem); // 메모리 해제
return 0;
}
[답안]
이 코드에서는 create_item 함수에서 item 구조체와 description 문자열에 대한 메모리를 할당합니다.
그러나 main 함수에서는 오직 item 구조체에 대해서만 메모리를 해제하고 있고, description 필드에 대한 메모리 해제가 누락되어 있습니다. 올바른 메모리 해제를 위해 main 함수에서 free(myItem->description); 을 추가해야 합니다.