sem_t empty, full;pthread_mutex_t mutex;void producer() { while (1) { // 데이터 생성 sem_wait(&empty); // 버퍼가 비어있는지 확인 pthread_mutex_lock(&mutex); // 버퍼에 접근하기 위한 락 // 데이터 추가 pthread_mutex_unlock(&mutex); // 락 해제 sem_post(&full); // 버퍼가 채워진 것을 알림 }}void consumer() { while (1) { sem_wait(&full); // 버퍼가 채워진 것을 확인 pthread_mutex_lock(&mutex); // 버퍼에 접근하기 위한 락 // 데이터 소비 pthread_mutex_unlock(&mutex); // 락 해제 sem_post(&empty); // 버퍼가 비어있는 것을 알림 }}
pthread_rwlock_t lock;pthread_rwlock_rdlock(&lock); // 읽기 락// 읽기 작업 수행pthread_rwlock_unlock(&lock); // 락 해제pthread_rwlock_wrlock(&lock); // 쓰기 락// 쓰기 작업 수행pthread_rwlock_unlock(&lock); // 락 해제