問題: 首先,這是我的問題的一個簡化示例,它實際上是已經由其他人編寫的大型框架的一部分,我必須在其中調整我的代碼。多對一的條件線程鎖
我有3個功能。兩個函數(函數1和函數2)被程序的其他部分異步同步調用。 我的最後一個函數(function3)連續運行,就像一個while循環一樣,它唯一做的就是在每次代碼迭代時觸發一個事件代碼。 我只希望這個最後一個函數在兩個其他函數之一完成迭代/被調用時運行。 我不能改變他們被調用的方式/時間,我只能阻止代碼的執行並取消阻止它。
我對C++相當陌生,我試着用互斥鎖來解決這個問題,但我沒有運氣。 我可以添加代碼,但它確實就像我解釋的。
void function1(){ // this function is called by other parts of the program
//some code
}
void funtion2(){ //this function is also called by other parts of the program
//some other code
}
void function3(){ //this function runs continuously, similar to a while loop with a 1ms sleep in it
fireEvent();//fires an event to run some other code
}
因此,功能3運行除非擋住了所有的時間,我只想每一個的其他功能之一有一個運行時通過運行該功能。就像我之前說過的,我不能自己調用function3,我只能操作函數中的代碼。
這樣做的最好方法是什麼?
激烈的googleing後,我只提出了條件變量,信號量和互斥量,但我不知道他們知道如何正確地實現它。
任何幫助/輸入/提示,非常感謝。
你不太確定的一件事是函數3()中的處理程序代碼是否應該匹配函數function1()和函數function2()的調用次數。即如果'function1()'被調用兩次,'function2()'三次,'function3()'中的迭代循環是否應該* – WhozCraig
對不起。實際上,這兩個函數總是會被同時調用,但並不總是能夠確定它們都會被調用,有時候只是其中的一個。但是,當兩者都被召喚時,它是在同一時間。在這兩種情況下,我只想讓function3運行一次。就像一個OR,如果其中一個運行,然後運行function3,如果兩者都運行,那麼仍然運行一次function3。 – trudesagen
編輯爲上面的那個。實際上,將會有16個這些函數喚醒函數3。函數總是會被同時調用,但並不總能確定所有函數都會被調用,有時可能是一半,有時只是一個。在所有情況下,我只想要function3運行一次。像OR一樣,如果其中一個運行,則運行function3,如果它們中的更多運行在同一時間,則仍然只運行一次function3。 – trudesagen