2011-09-26 48 views
0

我需要Linux上的多線程項目中的屏障。我知道pthread_barrier_init()和pthread_barrier_wait(),但我想在android上運行我的項目。它沒有這些功能。我知道如何用原子添加和原子比較來實現它。我想使用信號量,我可以使用信號量來實現它嗎?如何在android上的多線程中創建屏障

+2

http://developer.android.com/reference/java/util/concurrent/package-summary.html –

回答

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(); 
    } 
}