x 개의 스레드가 있고 목록이 비어 있지 않은 경우에만 링크 된 목록에서 요소를 제거해야합니다. 그러나 원하는 경우 언제든지 새 요소를 추가하기 위해 명명 된 파이프를 사용하기 때문에 목록이 비어있는 경우 해당 요소가 죽는 것을 원하지 않습니다. 내가 연결된 목록이 비어 있는지 확인하는 동안 문제가 발생했습니다. 하나의 요소에 내 스레드가 모두 들어있어 조건을 입력하면 두 번째 스레드가 프로그램을 중단시킵니다.스레드를 사용하여 연결된 목록에서 요소 제거
void threads(){
while(1){
if(isEmtpy!=1){
pthread_mutex_lock(&mutex);
//work
pthread_mutex_unlock(&mutex);
}
}
pthread_exit(NULL);
}
내 뮤텍스 위치를 변경해야한다고 가정합니다.하지만 if 조건 앞에 입력하면 아무 일도 일어나지 않습니다. 물론 isEmpty
변수를 보호하기 위해 로크 이상, 이동
세마포어를 사용하여 목록의 요소를 계산합니다. 루프 상단에서 기다립니다. 그런 다음 'isEmtpy'검사를 전혀 수행 할 필요가 없으며 폴링을 낭비하는 CPU 및 메모리 대역폭을 피할 수 있습니다. 요소를 목록에 추가 할 때마다 단위를 세미에 게시하십시오. –
요소의 수가 스레드 수와 같은 경우 요소를 제거하지 않을까요? – Mike
?? 스레드가 그들을 먹을 수있는만큼 빠르게 요소를 제거합니다. 한 번에 여러 항목이 추가된다는 것을 의미합니까? 한 스레드가 모든 항목을 목록에서 제거하기를 원하십니까? 다른 스레드를 불필요하게 유휴 상태로 두지 않겠습니까? 예 : 8 개의 스레드가 있고 3 개의 항목이 추가 된 경우 8 개의 스레드 중 하나를 선택하여 3 개의 항목을 모두 제거 하시겠습니까? 아니면 3 개의 스레드를 하나씩 제거 하시겠습니까? –