我pthread_barrier_t
在我的代码上使用来自 C/C++ 的代码来同步 3 个不同的线程。当我通过 gdb 使用调试时,它工作得很好,但是当我直接从板上运行二进制文件时,所有 3 个线程都卡在pthread_barrier_wait
. 屏障似乎无法看到所有 3 个线程都在那里。
我正在使用 Ubuntu 14.10、g++4.9、arm-linux-gnueabihf 将代码交叉编译到 ARM。该板是类似于 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,只是屏障没有。