/*使用讀寫鎖實現四個執行緒讀寫一段程式的例項,共建立了四個新的執行緒,其中兩個執行緒用來讀取資料,另外兩個執行緒用來寫入資料。在任意時刻,如果有乙個執行緒在寫資料,將阻塞所有其他執行緒的任何操作。*/
#include
#include
#include
#include
#include
static pthread_rwlock_t rwlock;//讀寫鎖物件
#define work_size 1024
char work_area[work_size];
int time_to_exit;
void *thread_function_read_o(void *arg);//讀執行緒1
void *thread_function_read_t(void *arg);//讀執行緒2
void *thread_function_write_o(void *arg);//寫執行緒1
void *thread_function_write_t(void *arg);//寫執行緒2
int main(int argc,char *argv)
res = pthread_create(&a_thread, null, thread_function_read_o, null);//create new thread建立執行緒
if (res != 0)
res = pthread_create(&b_thread, null, thread_function_read_t, null);//create new thread
if (res != 0)
res = pthread_create(&c_thread, null, thread_function_write_o, null);//create new thread
if (res != 0)
res = pthread_create(&d_thread, null, thread_function_write_t, null);//create new thread
if (res != 0)
res = pthread_join(a_thread, &thread_result);//等待a_thread執行緒結束
if (res != 0)
res = pthread_join(b_thread, &thread_result);
if (res != 0)
res = pthread_join(c_thread, &thread_result);
if (res != 0)
res = pthread_join(d_thread, &thread_result);
if (res != 0)
pthread_rwlock_destroy(&rwlock);//銷毀讀寫鎖
exit(exit_success);
}void *thread_function_read_o(void *arg)
}
pthread_rwlock_unlock(&rwlock);
time_to_exit=1;
pthread_exit(0);
}void *thread_function_read_t(void *arg)
}pthread_rwlock_unlock(&rwlock);
time_to_exit=1;
pthread_exit(0);
}void *thread_function_write_o(void *arg)
pthread_rwlock_unlock(&rwlock);
pthread_exit(0);
}void *thread_function_write_t(void *arg)
pthread_rwlock_unlock(&rwlock);//解鎖
pthread_exit(0);
}
linux讀寫鎖應用
思路 linux多執行緒時,資料空間為公共,乙個執行緒去新增資料,乙個執行緒去修改資料,這個時候需要加入互斥鎖,倆個執行緒如果同時去處理這個資料空間,資料會出錯,除了執行緒鎖之外,學習了乙個讀寫鎖 詳細函式說明 核心函式 初始化讀寫鎖 pthread rwlock init 寫入讀寫鎖中的鎖 pth...
linux程序讀寫鎖
讀寫鎖比mutex有更高的適用性,可以多個執行緒同時占用讀模式的讀寫鎖,但是只能乙個執行緒占用寫模式的讀寫鎖。1.當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞 2.當讀寫鎖在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的執行緒都可以得到訪問權,但是以寫模式對它進行...
Linux讀寫鎖使用
讀寫鎖很早就知道了,但是使用的不多,這次 中出現了,才認真思考怎麼用。摘錄一下 讀寫鎖的特點是 當讀寫鎖是寫加鎖時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞。當讀寫鎖是讀加鎖時,在這個鎖被解鎖之前,所有試圖以讀模式對他進行加鎖的執行緒都可以得到訪問權,但是如果執行緒以寫模式對此鎖加...