绑定多个 pthreads,每个 pthreads 到来自相同 class 的不同对象的相同成员函数
Binding multiple pthreads, each to the same member function of a different object from the same class
我已将多个 pthread 绑定到来自同一个 class 的独立对象的独立成员函数。
我不得不使用静态成员函数作为助手,因为在 C++ 中无法将成员函数直接绑定到 pthread;然而,我的应用程序表现得很奇怪,我怀疑这个静态函数的使用,因为这个静态函数在相同 class.
的所有对象之间共享
这种用法对吗?有没有其他解决方案?
很高兴听到任何指导。
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, ®ions[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, ®ions[i]);
}
for(int i=0; i < THREAD_COUNT*2; i++){
pthread_join(thread_ID[i], &exit_status);
}
return 0;
}
虽然我怀疑我所描述的绑定,但这不是我的问题的根源,而且它工作正常。
问题出在受优化器影响的 while 循环中!使用 volatile 关键字解决了我的问题。
我已将多个 pthread 绑定到来自同一个 class 的独立对象的独立成员函数。
我不得不使用静态成员函数作为助手,因为在 C++ 中无法将成员函数直接绑定到 pthread;然而,我的应用程序表现得很奇怪,我怀疑这个静态函数的使用,因为这个静态函数在相同 class.
的所有对象之间共享这种用法对吗?有没有其他解决方案?
很高兴听到任何指导。
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, ®ions[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, ®ions[i]);
}
for(int i=0; i < THREAD_COUNT*2; i++){
pthread_join(thread_ID[i], &exit_status);
}
return 0;
}
虽然我怀疑我所描述的绑定,但这不是我的问题的根源,而且它工作正常。 问题出在受优化器影响的 while 循环中!使用 volatile 关键字解决了我的问题。