null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
Mutex & Semaphore
#c
#c-lang
#advanced
#concurrency
#mutex
@devpc
|
2026-03-29 13:49:34
|
GET /api/v1/nodes/80?nv=1
History:
v1 (2026-03-29) (Latest)
0
Views
0
Calls
# Mutex & Semaphore > mutex로 임계 구역 보호, semaphore 카운팅 ## 학습 목표 - mutex로 임계 구역(critical section)을 보호한다 - semaphore로 자원 접근 수를 제어한다 ## 내용 ### Mutex 기본 사용 ```c #include <pthread.h> pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; int counter = 0; void *increment(void *arg) { for (int i = 0; i < 100000; i++) { pthread_mutex_lock(&lock); counter++; pthread_mutex_unlock(&lock); } return NULL; } ``` ### Mutex 동적 초기화 및 해제 ```c pthread_mutex_t lock; pthread_mutex_init(&lock, NULL); // ... 사용 ... pthread_mutex_destroy(&lock); ``` ### POSIX 세마포어 ```c #include <semaphore.h> sem_t sem; sem_init(&sem, 0, 3); // 최대 3개 스레드 동시 접근 // 진입 (카운트 -1, 0이면 블록) sem_wait(&sem); // ... 임계 구역 ... // 해제 (카운트 +1) sem_post(&sem); sem_destroy(&sem); ``` ### Mutex vs Semaphore | 항목 | Mutex | Semaphore | |------|-------|-----------| | 소유권 | 잠근 스레드만 해제 | 누구나 해제 가능 | | 카운트 | 0 또는 1 (바이너리) | 0 이상 (카운팅) | | 용도 | 상호 배제 | 자원 수 제한 | ## 참고 - Mutex는 잠근 스레드가 반드시 직접 해제해야 한다 - 데드락 방지를 위해 락의 획득 순서를 일관되게 유지해야 한다
// COMMENTS
ON THIS PAGE