2014-02-27 60 views
0

我正在通過不同的方法解決生產者/消費者問題。我目前正在從事的工作涉及到我自己實現的一個信號量,與Peterson的解決方案配合使用,以保護信號量的down()和up()函數調用。如何在C中實現我自己的信號量?

問題是,我在C中工作,我可以考慮創建信號量的唯一方法是使用帶有函數指針的結構體,用於down()和up()。這是正確的想法嗎?

+1

函數指針似乎與問題無關:您可以調用'up(my_semaphore);'而不是'my_semaphore-> up(my_semaphore);''。 (在C中,因爲沒有傳遞隱式的'this'參數,所以函數可以知道哪個信號量調用它,所以不能真正擁有'my_semaphore-> up()'。 – Arkku

回答

2

您可能想要使用某些由OS提供的或硬件提供的同步原語。示例包括系統調用(例如,Linux的futex調用,Windows'EnterCriticalSection),硬件交換調用(例如,x86上的cmpxchg,ARM上的ldrex/strex)或使用這些方法之一的庫函數(例如pthread_mutex)。

試圖在沒有任何操作系統或硬件幫助的情況下進行同步可能會非常困難。

+0

+1 - 需要操作系統支持任何理智的解決方案。 –

0

檢查futex,它是一個用戶空間syn原語。但我不認爲你在尋找這麼複雜的事情。