pthread Read-Write-lock 질문
#include
#include
#include
#include
#include
#include
pthread_rwlock_t R_Lock;
int ac=0;
void* RD_LOCK(void* arg) {
pthread_rwlock_rdlock(&R_Lock);
printf("%d\n",ac); // ac is global variable 0
sleep(1);
pthread_rwlock_unlock(&R_Lock);
}
void* WR_LOCK(void* arg) {
pthread_rwlock_wrlock(&R_Lock);
printf("RW LCOK\n");
ac++;
printf("%d\n",ac);
sleep(1);
pthread_rwlock_unlock(&R_Lock);
}
void DO_RW_LCOK(){
pthread_t RW[3];
pthread_rwlock_init(&R_Lock, NULL);
pthread_create(&RW[0], NULL, RD_LOCK,NULL); //==0 thread
pthread_create(&RW[1], NULL, RD_LOCK,NULL); //==1 thread
pthread_create(&RW[2], NULL, WR_LOCK,NULL); //==2 thread
pthread_rwlock_destroy(&R_Lock);
for(int i=0; i<3;i++)
pthread_join(RW[i],NULL);
}
int main(){
DO_RW_LCOK();
return 0;
}
순서를 read(0번 1번)를 다하고 write lock을 걸면 write가 우선실행 되던데 이유가 뭔가요?
아무도 답변을 안하시기에 짧은 코멘트만 드립니다.
아무도 답변을 안하시기에 짧은 코멘트만 드립니다.
pthread_create() 로 생성된 쓰레드의 동작 순서는 불특정(undefined, non-deterministic)입니다. 어떤 환경에서는 이렇게, 다른 환경에서는 다른 순서로 실행될 수 있습니다. 결론은 실행순서와 상관없이 동작하도록 설계를 하셔야 합니다.
댓글 달기