我有一个家庭作业问题,我真的不知道如何开始。
以下是问题: “这个问题利用了名为ReaderWriterAppender信号量的新同步原语。与ReaderWriter信号量一样,读者和作者使用相同的规则,并为appender添加了这些新规则:
1)在任何给定时间,只有一个appender可以拥有信号量
2)appender和write不能同时拥有信号量
3)读取可以在追加“
我需要自己实施。
有一个给定的结构
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或任何东西。基本上,“实施它”
提前致谢,
卡西姆
答案 0 :(得分:2)
一些提示:
appender和read有什么不同?
如果你只是使用读取锁定appender怎么办?将一个案例命名为不同。
我可以在appender案例中再添加一个锁来防止(2)中的情况吗?
伪代码:
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()”?
锁定顺序是否重要?如果是,那么正确的顺序是什么?