[c언어] 멀티 스레딩의 단점

멀티 스레딩은 프로그램의 성능을 향상시키고 병렬 처리를 가능하게 합니다. 그러나 멀티 스레딩은 몇 가지 단점을 가지고 있습니다. 이번 포스트에서는 C언어에서 멀티 스레딩을 사용할 때 주의해야 할 몇 가지 단점에 대해 알아보겠습니다.

명시적 Lock 작업

멀티 스레딩 프로그래밍에서는 명시적으로 락(lock)을 관리해야 합니다. 여러 스레드가 같은 자원에 접근할 때, 데이터의 일관성을 유지하기 위해 락을 사용해야 합니다. 하지만 락을 관리하는 것은 복잡하고 에러가 발생하기 쉽습니다. 잘못된 락 처리로 인해 데드락(deadlock)이 발생할 수 있어서 주의가 필요합니다.

void func() {
  pthread_mutex_lock(&mutex);
  // critical section
  pthread_mutex_unlock(&mutex);
}

메모리 관리 문제

멀티 스레딩에서는 메모리 관리에도 주의해야 합니다. 각 스레드는 독립적인 스택을 가지고 있어서, 스택 오버플로우(stack overflow)가 발생할 수 있습니다. 또한 메모리 누수(memory leak)도 발생할 수 있으므로, 메모리를 관리하는 것이 중요합니다.

void *func(void *arg) {
  char buf[1024];
  // ...
}

성능 감소

멀티 스레딩은 성능을 향상시킬 수 있지만, 때로는 오히려 성능을 저하시킬 수 있습니다. 스레드 간의 동기화 작업과 캐시 일관성 유지를 위한 오버헤드가 발생하여 전체적인 성능이 감소할 수 있습니다.

결론

멀티 스레딩은 프로그램의 성능을 향상시키고 병렬 처리를 가능하게 합니다. 그러나 명시적 락 처리, 메모리 관리 문제, 성능 저하 등의 단점을 가지고 있어서 주의가 필요합니다. 멀티 스레딩을 사용할 때에는 이러한 단점들을 고려하여 프로그래밍 해야 합니다.

참고 자료