2012-02-14 62 views
1

我有一个家庭作业问题,我真的不知道如何开始。作业 - 读者写入appender信号量

这里的问题: “这个问题利用新的同步原语称为ReaderWriterAppender信号的同样的规则对于适用于读者和作家与读写器的信号量,增加的这些新规则的一个appender :

1)不超过一个的appender可以在任何给定的时间有信号
2)附加器和写不能拥有在同一时间
3旗语)读取追加”

时才能进行。

我需要在我的ow中实现它ñ。

没有给出

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

必须缺少一些要求,因为如上所述,您可以使用读写器锁并使'rwa_append_lock'调用'rwa_write_lock'。 – 2012-02-14 08:07:41

回答

2

一些提示:

  1. 什么是附加目的地的不同和阅读?

  2. 如果你只是为appender使用读锁,该怎么办?命名一个他们不同的案例。

  3. 我可以在appender case中添加一个锁来防止(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()”?

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

+0

谢谢。现在我懂了 :) – Gasim 2012-02-14 08:58:05