我在Linux上的多线程项目中需要一个障碍。我知道pthread_barrier_init()和pthread_barrier_wait(),但我想在android上运行我的项目。它没有这些功能。我知道如何使用原子添加和原子比较来实现它。我想使用信号量,我可以使用信号量来实现它吗?
答案 0 :(得分:2)
使用CyclicBarrier
,这或多或少与pthread屏障相同。
示例代码(来自链接页面)
class Solver {
final int N;
final float[][] data;
final CyclicBarrier barrier;
class Worker implements Runnable {
int myRow;
Worker(int row) { myRow = row; }
public void run() {
while (!done()) {
processRow(myRow);
try {
barrier.await();
} catch (InterruptedException ex) {
return;
} catch (BrokenBarrierException ex) {
return;
}
}
}
}
public Solver(float[][] matrix) {
data = matrix;
N = matrix.length;
barrier = new CyclicBarrier(N,
new Runnable() {
public void run() {
mergeRows(...);
}
});
for (int i = 0; i < N; ++i)
new Thread(new Worker(i)).start();
waitUntilDone();
}
}