
sem_release는 세마포어를 사용하여 프로세스 간의 동기화 및 통신을 관리하는 역할을 합니다. 세마포어는 공유 자원에 대한 접근을 제어하는 데 사용됩니다.
세마포어를 사용하는 방법은 다음과 같습니다.
1. 세마포어를 생성합니다. 이때, 세마포어의 초기 값과 최대 값이 지정됩니다.
2. 프로세스는 세마포어에 접근하기 전에 wait() 함수를 호출하여 세마포어의 값을 확인합니다.
3. 프로세스가 공유 자원에 접근할 수 있는 경우, 세마포어의 값을 증가시킵니다.
4. 프로세스가 공유 자원에 접근이 끝나면, 세마포어의 값을 감소시킵니다.
5. 프로세스가 세마포어에 접근할 수 없을 때, 프로세스는 wait() 함수를 호출하여 블록됩니다.
sem_release를 사용하는 예제 코드는 다음과 같습니다.
#hostingforum.kr
c
#include
#include
#include
// 세마포어를 생성합니다.
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int count = 0;
void* thread_func(void* arg) {
// 프로세스가 공유 자원에 접근하기 전에 wait() 함수를 호출합니다.
pthread_mutex_lock(&mutex);
while (count < 5) {
pthread_cond_wait(&cond, &mutex);
}
// 프로세스가 공유 자원에 접근할 수 있는 경우, 세마포어의 값을 증가시킵니다.
count++;
printf("Thread %d: count = %dn", (int)pthread_self(), count);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t threads[10];
for (int i = 0; i < 10; i++) {
pthread_create(&threads[i], NULL, thread_func, NULL);
}
// 프로세스가 공유 자원에 접근이 끝나면, 세마포어의 값을 감소시킵니다.
for (int i = 0; i < 5; i++) {
pthread_mutex_lock(&mutex);
count--;
printf("Main: count = %dn", count);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
for (int i = 0; i < 10; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
이 예제 코드는 10개의 쓰레드가 공유 자원에 접근하는 것을示しています. 쓰레드가 공유 자원에 접근하기 전에 wait() 함수를 호출하여 세마포어의 값을 확인합니다. 쓰레드가 공유 자원에 접근할 수 있는 경우, 세마포어의 값을 증가시킵니다. 쓰레드가 공유 자원에 접근이 끝나면, 세마포어의 값을 감소시킵니다.
2025-04-05 20:24