Связывание нескольких pthreads, каждый с той же функцией-членом другого объекта из того же класса

Я связал несколько pthreads с независимой функцией-членом независимых объектов одного и того же класса.

Мне пришлось использовать статическую функцию-член в качестве помощника, поскольку невозможно связать функцию-член непосредственно с pthread в C++; однако мое приложение ведет себя странно, и я с подозрением отношусь к использованию этой статической функции, поскольку эта статическая функция используется всеми объектами одного и того же класса.

Является ли этот тип использования правильным? Есть ли альтернативное решение?

Я ценю услышать любое руководство.

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;
}

1 ответ

Решение

Хотя меня заподозрили в описанной мной привязке, она не была источником моей проблемы и работает правильно. Проблема была в ожидании циклов, на которые воздействовал оптимизатор! Использование изменяемого ключевого слова решило мою проблему.

Другие вопросы по тегам