linux使用多线程解决“读者—写者”问题实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;进程正相反。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

相关文档
最新文档