2017-10-09 72 views
0

我有一個場景,其中一個函數(代碼塊)被n個不同的回調函數訪問。如果同時有多個回調調用該函數,則必須在該函數中放置一個互斥鎖,以便一次只有一個回調函數可以訪問該回調函數,而另一個回調函數必須等待至臨界區中的第一個回調函數。 這是正確的設計?有其他設計嗎?當第一個回調得到處理時,有沒有辦法讓第二個回調等待?同一代碼塊在同一時間被不同的回調訪問

+2

此類函數稱爲重入函數,如果它使用所有局部變量或實例變量,它們將執行正常。需要同步使用共享/全局變量的函數或其部分 –

回答

1

取決於該功能。

它修改共享內存嗎?
它是否使用其他展示競態條件的函數?

如果答案是肯定的,那麼您必須應用鎖定和同步過程。
從開始到結束使用該鎖定將毫無意義。只有在臨界區之前和之後才應用鎖(即共享數據更新(寫入)的代碼段)