2014-06-04 1 views
0

이진 파일에 텍스트를 자동 저장하는 기능과 이진 파일에서 인쇄하는 기능을 포함하는 이진 파일에 텍스트를 저장하는 코드를 작성하고 있습니다. pthread 잠금을 결합하고 조인해야합니다 . 강사는 pthread 또는 뮤텍스가 실제로 무엇에 대해 얘기하지 않았지만 우리는 글로벌 변수로 Pthread C에서 가입 하시겠습니까?

pthread_mutext_t mutex; 
pthread_t autosavethread; 

주어졌다, 그래서 나는 그것에 대해 혼란 스러워요. 또한 공유 변수를 변경하거나 읽을 때마다 잠금을 사용해야한다는 것을 이해합니다 (제 경우에는 이진 파일이됩니다). 하지만 파일의 끝에서 pthread_join을 사용하기로되어 있는데, 어떤 동작을하는지, 어떤 인수가 사용되는지는 알 수 없습니다. 나는 mutex를 추측하고 autosavethread는 닫히기로되어 있습니다, 또는 그 라인을 따라 뭔가가 있지만, 나는 그것을 쓰는 방법을 모른다. 아무도 내 이해를 돕지 않을 수 있습니까?

+1

웹에서 pthreads 튜토리얼을 찾으십시오. 많이있다. 또한 여기에는 스레드 생성 및 결합과 뮤텍스의 적절한 사용법을 보여주는 수천 개의 응답이 있습니다. 당신이해야 할 일에 대한 당신의 직감은 옳습니다. 코드에 문제가있는 경우 특정 질문을 반환 할 수 있습니다. – Duck

+0

리눅스 박스에 있다면, 터미널에서'man functionName'을 사용하여 특정 기능에 대한 정보를 얻을 수 있습니다. –

답변

0

pthread - joinable 스레드 & 분리 된 스레드에는 두 가지 유형이 있습니다. 작업이 완료되면 스레드가 단지 작업을 수행하고 사라 지도록하려면 분리 된 스레드가 필요합니다. 할당 된 작업으로 스레드가 완료 될 때 생성 된 스레드와 통신하려면 결합 가능한 스레드를 사용해야합니다. 기본적으로 부모가 & 생성 된 스레드가 스레드가 완료된 후 통신해야 할 때 필요합니다.

정확하게 pthread API를 호출하고 전달할 수있는 것이 무엇인지 Google에 알리는 것이 좋습니다.

하지만 내가 여기서 언급하고자하는 한 가지 점은 조인 가능한 스레드의 경우 생성 된 스레드에 대해 pthread_join을 명시 적으로 호출해야한다는 것입니다. 그렇지 않으면 심각한 메모리 누수가 발생합니다. 결합 할 수있는 스레드가 작업을 완료하면 스레드가 종료 된 것처럼 보입니다 (Linux에서는/proc/PID/task/폴더를 확인할 수 있고 스레드가 완료되면 그 아래의 항목은 사라지 겠지만) 결합 가능한 스레드, 즉 스택은 여전히 ​​프로세스 메모리 공간에 있습니다. 결합 할 수있는 스레드가 점점 더 많이 생성되고 작업이 완료되면 pthread_join을 명시 적으로 호출하지 않는 한 각 스레드의 스택이 프로세스 공간에 남아 있습니다. 조금이라도 도움이 되었길 바랍니다.

관련 문제