我有一个作业问题,我真的不知道如何开始。
问题如下: “这个问题利用了称为 ReaderWriterAppender 信号量的新同步原语。与 ReaderWriter 信号量一样,同样的规则适用于读者和作者,并为附加程序添加了这些新规则:
1) 在任何给定时间,不能有超过一个 appender 拥有信号量。
2) 一个appender和write不能同时拥有semaphore
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 或任何东西。基本上,“实现它”
提前致谢,
加西姆
最佳答案
一些提示:
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()”?
加锁的顺序重要吗?如果是,正确的顺序是什么?
关于c - 作业——reader写appender信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272750/