我在我的代码中使用C / C ++中的pthread_barrier_t
来同步3个不同的线程。当我使用Debug时,通过gdb,它工作得很好,但是当我直接从板上运行二进制文件时,所有3个线程都卡在pthread_barrier_wait
上。似乎屏障无法看到所有3个线程都在那里。
我使用Ubuntu 14.10将代码交叉编译到ARM,使用g ++ 4.9,arm-linux-gnueabihf。该板是与TI AM3352和Debian 8类似的BBB。
代码是 线程1
case stRecv :
pthread_barrier_wait(&IonEntCommBarrier[client]);
if(IonFillAnswer[client])
state = stSend;
else
state = stStop;
break;
线程2
case stRecv :
pthread_barrier_wait(&IonEntCommBarrier[client]);
if(IonFillAnswer[client])
state = stSend;
else
state = stStop;
break;
主题3
case stRecv :
IonEntCommData[client].RequestLen = Recv(client, EthernetObj->getRXBufAddr(client));
IonFillAnswer[client] = false;
if(IonEntCommData[client].RequestLen > 1) {
IonFillAnswer[client] = true;
state = stSend; // Msg Ok!
} else {
EthernetObj->setEthernetFlag(client, ETH_START);
}
if(IonEntCommData[client].RequestLen <= 1) break;
IonEntToutTSyssec[client] = TIMEOUT_S_ION; // Timer zerado
pthread_barrier_wait(&IonEntCommBarrier[client]);
break;
我正在使用
初始化屏障pthread_barrier_init(&IonEntCommBarrier[client],NULL,3);
任何人都知道它在这里发生了什么?
PS:同一个库的其他功能运行良好,比如pthread_mutex,只是障碍没有。