0

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,只是屏障没有。

4

0 回答 0