2012-02-14 64 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