代码之家  ›  专栏  ›  技术社区  ›  fmark

什么时候破坏pthread屏障是安全的?

  •  6
  • fmark  · 技术社区  · 17 年前

    pthread_barrier_t barrier;
    ...
    int rc = pthread_barrier_wait(b);
    if (rc != PTHREAD_BARRIER_SERIAL_THREAD && rc != 0){
      perror("pthread_barrier_wait");
      exit(1);
    }
    
    if (id == 0){
      if(pthread_barrier_destroy(&(threads[t_root].info.tmp_barrier))){
        perror("pthread_barrier_destroy");
        exit(1);
      }
    }
    
    2 回复  |  直到 17 年前
        1
  •  5
  •   Jim Dovey    17 年前

    之后 pthread_barrier_wait() 如果返回,所有线程都将遇到障碍并继续进行。由于只给了一个线程 PTHREAD_BARRIER_SERIAL_THREAD

    int rc = pthread_barrier_wait(&b)
    if ( rc == PTHREAD_BARRIER_SERIAL_THREAD )
    {
        pthread_barrier_destroy(&b);
    }
    

    另外,请注意 pthread_barrier_destroy() 将返回以下结果 EBUSY pthread_barrier_wait() ).

    推荐文章