linux使用多线程解决“读者—写者”问题实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系
实验(项目)报告
一、基本信息
二、目的与要求
目的:
通过实验掌握Linux环境下多线程程序的开发方法。
要求:
1.掌握线程的基本概念及操作;
2.掌握线程间通信的基本方法;
3.掌握Linux环境下多线程程序的开发方法及步骤。
三、完成实验(项目)过程和效果
内容:
1.问题分析;
有100个读线程和100个写线程共同读、写文件
(1)允许多个reader同时读一个文件;
(2)当有一个reader在读文件时,不允许writer写文件;
(3)当有一个writer在写文件时,不允许reader读文件,也不允许其
他writer写文件。
2.程序实现;
3.程序的调试与运行。
步骤:
1.问题分析
可以利用读写锁解决读者-写者问题
2.程序实现
1)读者:
void *Reader(void *id)
{
RandomSleep();
pthread_rwlock_rdlock(&rwlock);
ReaderNum++;
ReadFile(*((int *)id));
ReaderNum--;
pthread_rwlock_unlock(&rwlock); }
2)写者:
void *Writer(void *id)
{
RandomSleep();
pthread_rwlock_wrlock(&rwlock);
WriterNum++;
WriteFile(*((int *)id));
WriterNum--;
pthread_rwlock_unlock(&rwlock);
}
3)线程的创建:
for(i=0; i { id[i] = i; pthread_create(&readthread[i], NULL, Reader, (void *)&id[i]); pthread_create(&writethread[i], NULL, Writer, (void *)&id[i]); } for(i=0; i { pthread_join(readthread[i], NULL); pthread_join(writethread[i], NULL); } 3.程序的调试与运行 四、知识应用以及经验总结 1.线程与进程的区别? (1)一个程序至少有一个进程,一个进程至少有一个线程。 (2)线程的划分尺度小于进程,使得多线程程序的并发性高。 (3)进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;进程正相反。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。