家庭作业 - 读者写appender信号量

时间:2012-02-14 06:39:00

标签: c multithreading file semaphore

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

以下是问题: “这个问题利用了名为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​​或任何东西。基本上,“实施它”

提前致谢,
卡西姆

1 个答案:

答案 0 :(得分:2)

一些提示:

  1. appender和read有什么不同?

  2. 如果你只是使用读取锁定appender怎么办?将一个案例命名为不同。

  3. 我可以在appender案例中再添加一个锁来防止(2)中的情况吗?

  4. 伪代码:

    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()”?

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