2015-05-15 81 views
1

我已經綁定了多個pthread到來自同一個類的獨立對象的獨立成員函數。綁定多個pthread,每個綁定到同一個類的不同對象的同一個成員函數

我不得不使用靜態成員函數作爲助手,因爲它不可能直接將成員函數綁定到C++中的pthread;然而,我的應用程序行爲奇怪,我對這個靜態函數的使用感到懷疑,因爲這個靜態函數是在同一個類的所有對象之間共享的。

這種類型的使用權是否正確?有其他解決方案嗎?

我很欣賞聽到任何指導。

class Region 
{ 
public: 

    Region(); 

    void Init(); 

    void Push_Tuple(int int_value, float float_value, bool tuple_source); 

    static void *Read_Tuple_R_Process_S_Update_helper(void *context) 
    { 
     return ((Region *)context)->Read_Tuple_R_Process_S_Update(); 
    } 
    void* Read_Tuple_R_Process_S_Update(); 

    static void *Read_Tuple_S_Process_R_Update_helper(void *context) 
    { 
     return ((Region *)context)->Read_Tuple_S_Process_R_Update(); 
    } 
    void* Read_Tuple_S_Process_R_Update(); 
}; 

int main(){ 

    Region regions[THREAD_COUNT*2]; 

    for(int i=0; i < THREAD_COUNT*2; i++){ 
     regions[i].Init(); 
    } 

    pthread_t thread_ID[THREAD_COUNT*2]; 
    void* exit_status; 

    for(int i=0; i < THREAD_COUNT; i++){ 
     pthread_create(&thread_ID[i], NULL, &Region::Read_Tuple_R_Process_S_Update_helper, &regions[i]); 
    } 

    for(int i=THREAD_COUNT; i < THREAD_COUNT*2; i++){ 
     pthread_create(&thread_ID[i], NULL, &Region::Read_Tuple_S_Process_R_Update_helper, &regions[i]); 
    } 

    for(int i=0; i < THREAD_COUNT*2; i++){ 
     pthread_join(thread_ID[i], &exit_status); 
    } 

return 0; 
} 
+0

你看過Boost或C++ 11線程嗎?兩者都簡化了線程創建和綁定到類方法。 – RTLinuxSW

回答

0

雖然我被懷疑綁定,我描述,它不是我的問題的來源,它的工作正確。 問題在等待受優化程序影響的循環!使用volatile關鍵字解決了我的問題。

相關問題