Multithreading 屏障代码,等待所有线程到达集合点,然后进入临界区 信号量互斥=1; 信号量屏障=0; 整数计数=0; void barrier-done(){ 等待(互斥); 计数++; 如果(计数

Multithreading 屏障代码,等待所有线程到达集合点,然后进入临界区 信号量互斥=1; 信号量屏障=0; 整数计数=0; void barrier-done(){ 等待(互斥); 计数++; 如果(计数,multithreading,concurrency,operating-system,Multithreading,Concurrency,Operating System,有人知道这个代码的问题吗?我正在尝试为屏障实现一个代码。假设N是期望等待屏障的线程数 例如,N=10,那么线程1到9将具有if条件true,并且它们将等待barrier。 调用此函数的第10个线程将使该条件为false,因为(10!

有人知道这个代码的问题吗?我正在尝试为屏障实现一个代码。

假设N是期望等待屏障的线程数

例如,N=10,那么线程1到9将具有if条件true,并且它们将等待barrier。 调用此函数的第10个线程将使该条件为false,因为(10!<10)。 因此,它将继续前进并跨越障碍9次


我不确定你想要达到的确切情况。但是,这是我从你的代码中理解的。可能您需要稍微调整一下if条件。

我也有同样的问题,但问题是您不能在函数“barrier done”的名称中使用减号。修复此错误后,代码将是正确的

semaphore mutex = 1;
semaphore barrier = 0;
int count = 0;
void barrier-done() {
    wait(mutex);
    count++;
    if (count < N ) {
      post(mutex);
      wait(barrier);
    }
    else {
      post(mutex);
      count = 0;
      for (int i = 1; i < N; i++) {
      post(barrier);
    }
  }
}