2011-09-26 6 views
0

Linux의 멀티 스레드 프로젝트에서 장벽이 필요합니다. pthread_barrier_init() 및 pthread_barrier_wait()을 알고 있지만 안드로이드에서 프로젝트를 실행하고 싶습니다. 이 기능이 없습니다. 원자 추가 및 원자 비교로 구현하는 방법을 알고있다. 세마포어를 사용하고 싶습니다. 세마포어를 사용하여 구현할 수 있습니까?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(); 
    } 
} 
관련 문제