操作系统同步算法(二)
上一篇文章中,我们已经通过多线程以及互斥锁来实现了读写互斥的简单的读者写者算法。由于这种设计会存在一种线程“饿死”的情况,这里我们进行一下简单的改进,使得读写操作能够互斥并且交替的进行。
/****读写互斥问题**读的时候不能写,写的时候不能读**读写交替**/#include<stdio.h>#include<pthread.h>//声明一把互斥锁pthread_mutex_t mutex;//声明是否有内容可读的标志int hasContent = 0;void writer(void){ while(1) { pthread_mutex_lock(&mutex); if(hasContent == 0) { printf("writer加锁成功,开始写...\n"); sleep(2); hasContent = 1; printf("writer写操作结束,释放互斥锁\n"); } pthread_mutex_unlock(&mutex); }}void reader(void){ while(1) { pthread_mutex_lock(&mutex); if(hasContent == 1) { printf("reader加锁成功,开始读...\n"); sleep(2); hasContent = 0; printf("reader读操作结束,释放互斥锁\n"); } pthread_mutex_unlock(&mutex); } }int main(void){ printf("初始化互斥锁\n"); pthread_mutex_init(&mutex,NULL); pthread_t thread_writer; pthread_t thread_reader; printf("开始读写线程\n"); pthread_create(&thread_reader,NULL,(void *)reader,NULL); pthread_create(&thread_writer,NULL,(void *)writer,NULL); printf("回收线程\n"); pthread_join(thread_reader,NULL); pthread_join(thread_writer,NULL); printf("运行结束\n"); return 0;}