当前位置: 首页 > news >正文

做玄幻封面素材网站政务服务大厅网站建设方案

做玄幻封面素材网站,政务服务大厅网站建设方案,泉州网站建设兼职,建德网站设计公司文章目录 实验要求分析保证读写、写写互斥保证多个读者同时进行读操作读者优先实例代码分析写者优先读写公平法示例代码分析实验要求 创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制分别…

文章目录

  • 实验要求
  • 分析
    • 保证读写、写写互斥
    • 保证多个读者同时进行读操作
  • 读者优先
    • 实例代码
    • 分析
  • 写者优先
  • 读写公平法
    • 示例代码
    • 分析

实验要求

  1. 创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。
  2. 每个线程按相应测试数据文件的要求进行读写操作。
  3. 信号量机制分别实现读者优先写者优先的读者-写者问题。

分析


由于只有一个共享文件, 而有n个读线程, n个写者线程需要互斥地对该文件进行读写操作

读者写者问题需要保证

  • 读读不互斥、允许多个读者同时进行读操作
  • 读写、写写互斥

保证读写、写写互斥


由于临界资源(共享文件)只有一个, 所以创建一个互斥信号量(资源数量只有1份)mutex_file来对进行对文件地互斥操作

保证多个读者同时进行读操作


由于需要保证多个读者不互斥地对文件进行读操作, 所以设置一个进程内的全局变量(线程共享) reading_count, 表示正在对文件进行读操作的线程的数量.

每当有一个读线程进入临界区后, 对该变量的数值+1.

由于有多个读线程, 所以对该全局变量的访问也需要互斥, 因此增加一个互斥信号量mutex_count

如果读线程判断到reading_count != 0, 则不用对信号量mutex_fileP操作, 可以直接进入临界区. 否则, 即该读线程是第一个读线程, 该读线程首先要对信号量mutex_file做P操作.

读者优先

  • 主函数

    • 打开要互斥访问的文件
    • 初始化信号量
    • 创建N个读者线程, N个写者线程mutex_file信号量代表的
  • 读者线程

    • 不断地请求对文件的操作(对信号量mutex_file进行P操作).
    • 打印读者线程id, 用于后续分析.
    • 如果成功的进入临界区, 读取文件的大小, 并打印到标准输出.
  • 写者线程

    • 不断地请求对文件的操作(对信号量mutex_file进行P操作).
    • 打印写者线程id, 用于后续分析.
    • 如果成功的进入临界区, 则对文件写一行文本, 这里为hello world\n.

实例代码

#include <iostream>
#include <vector>
#include <unistd.h>
#include <sys/file.h>
#include <pthread.h>
#include <semaphore.h>
// convient to code
#define P(x) sem_wait(x);
#define V(x) sem_post(x);
sem_t mutex_count;
sem_t mutex_file;
sem_t mutex_print; // make the print info correct
int reading_count = 0; // the amount of the reading thread
int fd; // the shared file descriptor
const int N = 5;// the thread of the writer
char writer_str[] = "hello world\n";
void* writer_thread(void* arg) {while (true) {// try to operate the fileP(&mutex_file);P(&mutex_print);printf("the writer %d is writing\n", arg);fflush(stdout);V(&mutex_print);// write into the filewrite(fd, writer_str, sizeof(writer_str) - 1);sleep(1);// release the fileV(&mutex_file);}
}
// the thread of the reader
void* reader_thread(void* arg) {while (true) {// Firstly, we need to check and plus the reading_count// so, we try to catch the mutex_countP(&mutex_count)
http://www.yayakq.cn/news/946282/

相关文章:

  • 做app模板网站安卓应用商店下载
  • 课程网站怎么做公司部门职能介绍
  • 怎么做网络彩票网站精湛的企业网站建设
  • 中医网站开发长春网站建设联系吉网传媒优
  • 网站开发教程视频百度云资源wordpress附件下载失败
  • 鼓楼公司网站建设费用怀来县建设局网站
  • 企业网站建设费用预算企业网站建站意义
  • vs2013做网站wordpress文章如何匪类
  • 做外链的博客网站备案网站内容说明
  • 做网站文章要一篇一篇的写吗如何建英文网站
  • 如何区分官方网站和空壳网站手机网站跟PC端网站有啥区别
  • 网站都有哪些类型方维制网站
  • 湖南鸿泰电力建设有限公司网站vue.js网站建设
  • .网站建设课程设计广州市品牌网站建设怎么样
  • 乌兰浩特网站制作推广策划方案怎么做
  • 网站怎么修改模板内容广州注册公司地址怎么解决
  • wordpress网站程序员初学者怎么制作平面图
  • 任何判断网站SEO做的好坏打开国外网站很慢
  • 网销都是在那些网站做推广js博客网站开发计划书
  • WordPress建站如何解析流程图制作网页
  • 长沙网站微信开发wordpress搭电影网站
  • 做网站用php还是node学校网站对学校建设的重要性
  • 可以自己做视频网站吗个人主页网站模板
  • 做企业网站注意事项网站关键词优化seo
  • 东莞市行业网站制作公司wordpress移动模块位置
  • 东莞网站建设基础wordpress获取专题名
  • 高端品牌的推广成都自然排名优化
  • 开发网站需要学什么太原0元网站建设
  • 信阳市两学一做网站网站建设公司的成本有哪些内容
  • 手机网站制作案例二级域名前缀大全