首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作业阅读器编写附加器信号量

作业阅读器编写附加器信号量
EN

Stack Overflow用户
提问于 2012-02-14 14:39:00
回答 1查看 365关注 0票数 1

我有一个家庭作业的问题,我真的不知道如何开始。

问题是:“这个问题使用了新的称为ReaderWriterAppender信号量的同步原语。与ReaderWriter信号量一样,同样的规则也适用于读取器和写入器,并为附加器添加了这些新规则:

1)在任何给定时间内,最多只能有一个附加器拥有该信号量。

2)附加器和写入器不能同时拥有信号量

3)读取可以在追加期间进行。“

我需要自己实现它。

这里有一个给定的结构

代码语言:javascript
运行
复制
typedef struct {
   //structure here
} rwasem_t;

void rwalock_init(rwasem_t * rwa) {

}

void rwa_read_lock(rwasem_t * rwa) {

}

void rwa_write_lock(rwasem_t * rwa) {

}

void rwa_append_lock(rwasem_t * rwa) {

}

void rwa_append_unlock(rwasem_t * rwa) {

}

问题是,我不知道如何处理这个问题。我知道什么是读写信号量,我知道如何使用它们,而且我以前也用过它们。但我不知道如何实现它们。他们甚至不告诉我是否可以使用API或其他任何东西。基本上,“实现它”

提前谢谢你,

Gasim

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-14 15:03:42

一些提示:

  1. 附加器和读取有什么不同?
  2. 如果你只对附加器使用读锁会怎么样?说出一个它们不同的情况。
  3. 我可以在附加器的情况下再添加一个锁,以防止(2)中的情况发生吗?

伪代码:

代码语言:javascript
运行
复制
ReadWriteLock lock_a, lock_b;

void rwa_read_lock(rwasem_t * rwa) {
    lock_a.do_somethingA();
    lock_b.do_somethingB();   // is this needed?
}

void rwa_write_lock(rwasem_t * rwa) {
    lock_a.do_somethingC();
    lock_b.do_somethingD();   // is this needed?
}

void rwa_append_lock(rwasem_t * rwa) {
    lock_a.do_somethingE();
    lock_b.do_somethingF();   // is this needed?
}

什么是"do_somethingX()“?

锁定的顺序重要吗?如果是,正确的顺序是什么?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9272750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档