我有一個關於mutext處理的基本問題。 我有一個文件出現在2個其他線程(滿分3)。我需要相互排斥線程對它的訪問。所以,我做了以下的從線程1處理程序調用的函數:Pthread Mutex鎖定
int sub_routine_thread1{
pthread_mutex_lock(&mut)
FILE *fp;
fp = fopen("myfile", "r");
if(fp == NULL){
return -1;
}
pthread_mutex_unlock(&mut)
return 0;
}
正如你可以看到我已經知道,如果文件指針返回NULL,那麼我的互斥被鎖定在這裏和解鎖從未發生過。所以,我把它改成如下:
int sub_routine_thread1{
pthread_mutex_lock(&mut)
FILE *fp;
fp = fopen("myfile", "r");
if(fp == NULL){
pthread_mutex_unlock(&mut)
return -1;
}
pthread_mutex_unlock(&mut)
return 0;
}
不過這雖然之後我有一種不好的感覺,這是沒有辦法的辦法互斥鎖應該做的。我遇到了一些關於清理處理程序,也許認爲這是我必須編寫:
int sub_routine_thread1{
pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut);
pthread_mutex_lock(&mut);
FILE *fp;
fp = fopen("myfile", "r");
if(fp == NULL){
return -1;
}
pthread_cleanup_pop(1);
return 0;
}
這是正確的方式?你能澄清一下嗎?
你想要什麼,以防止?另一個線程在讀取文件時寫入文件?文件中應該是原子的最小工作單元是多少?從文件中讀取一些二進制結構?讀一條線?讀取文件的最後一行?讀整個文件? – ninjalj