pthread_barrier适用于调试但不运行

时间:2015-08-20 21:51:07

标签: linux pthreads embedded-linux beagleboneblack pthread-barriers

我在我的代码中使用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,只是障碍没有。

0 个答案:

没有答案