2012-12-25 3 views
0

함수에 pthread 잠금을 전달해도 되니? 내가 요청하는 이유는 내가 많은 스레드를 가지고 있기 때문에 소비자, 그리고 2 명의 생산자로 행동하는 10 개를 말하자면 각 소비자 스레드는 자신의 링크 된 목록 (버퍼)을 가지며, 생산자는 이들 중 하나에 데이터를 보낼 것이다. 스레드는 특정 규칙을 기반으로하므로 프로듀서 1이 소비자 1로 전송 된 다음 소비자 2로 전송 된 다음 다시 소비자 1로 전송됩니다. 나는이 생각하고 그래서함수에 pthread_mutex_t를 전달하십시오.

,

생산 한 소비자 5로 보내려면,

  1. 프로듀서 한 통화 기능 데이터 (IPC)를 공유하고 [잠금을 전달하는 링크 목록 5]이 함수는이 경우 잠금됩니다 5
  2. 함수 linked-list는 잠금 [5]을 잠그고 연결된 목록을 업데이트합니다.
  3. 5 번 함수가 링크 목록을 호출하면 잠금이 전달됩니다 consumer5는 항상 lock [5]를 사용합니다). 그리고 제작자가 이미이 잠금을 잠근 경우 그 때 그것은 기다릴 것이다.

잠금의 이름) (주에서 공유되는 점에 유의하시기 바랍니다

pthread_mutex_t lock[10]; 

내가 리눅스에 GCC를 사용하여, 내가 가지고있는 질문이 명확하지 않은 경우 알려 주시기 바랍니다 해요 사물을 묘사하는 끔찍한 방법.

+0

세마포어를 사용하는 것이 좋습니다. – Archie

답변

0

하실 수 있습니다. 그냥 뮤텍스의 주소를 전달해야합니다. 복사 할 수 없습니다.

0

당신은 좋은 생각을 할 수 있습니다. 당신은 다른 C 파일을 작성하고 삽입 :

pthread_mutex_t lock[10]; 
type_t *produce(int tid) { 

if (tid == {producer_1}) { 
    //call function linked-list to share the data (IPC) and pass lock[5] to this function, in this case it will be lock 5 
} 
... 
} 

void consume(type_t* data, int tid) { 
.... 
} 

을이 방법으로 당신이 당신의 프로그램이 읽기 쉽고 간단하게 당신의 처리를 중앙 집중화. 스레드에서 produceconsume을 생산자/소비자 ID와 함께 적용하십시오.

+0

고마워, 너는 나에게 뭔가 다른 것, func (struct buff, id) {pthread_mutex_lock (& ​​lock [id]); do_stuff; 반환;} – user1832809

관련 문제