pthread_atfork 함수 - 다중 루틴 프로그램 fork에서 서로 밀어냄 처리
멀티스레드 프로그램에서 fork 함수를 호출하면 잠금이 해제될 수 있습니다. 예:
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <wait.h>
pthread_mutex_t mutex;
void* another(void*arg)
{
printf(" ,
");
pthread_mutex_lock(&mutex);
sleep(5);
pthread_mutex_unlock(&mutex);
}
int main()
{
pthread_mutex_init(&mutex, NULL);
pthread_t id;
pthread_create(&id, NULL, another, NULL);
/* mutex, sleep(1)*/
sleep(1);
int pid = fork();
if(pid < 0)
{
pthread_join(id, NULL);
pthread_mutex_destroy(&mutex);
return 1;
}
else if(pid == 0)//
{
printf(" ,
");
/* mutex , , pthread_mutex_lock , */
pthread_mutex_lock(&mutex);
printf(" 。。。。
");
pthread_mutex_unlock(&mutex);
exit(0);
}
else
{
wait(NULL);
}
pthread_join(id, NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
pthread_atfork 함수
pthread는 전문적인 함수를 제공합니다 pthreadatfork (), fork 호출 후 부모 프로세스와 자금성이 명확하게 잠겨 있는지 확인합니다.함수는 다음과 같이 정의됩니다.
#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void));
이 함수는 상호 배척 자물쇠 상태를 정리하는 데 도움을 줄 세 개의 포크 핸들을 만들 것입니다.prepare 핸들은 fork 호출을 통해 하위 프로세스를 만들기 전에 실행됩니다. 모든 부모 프로세스의 상호 배척 자물쇠를 잠글 수 있습니다.parent 핸들은 fork 호출이 하위 프로세스를 만든 후에 fork가 되돌아오기 전에 부모 프로세스에서 실행됩니다.그것의 작용은prepare 핸들에 잠긴 모든 상호 배척 자물쇠를 방출하는 것이다.child 핸들은 fork가 되돌아오기 전에 하위 프로세스에서 실행됩니다.parent 핸들과 마찬가지로,child 핸들도prepare 핸들에 잠긴 상호 배척 자물쇠를 방출하는 데 사용됩니다.
함수가 성공적으로 0을 반환했고 오류가 오류 코드를 반환했습니다.
위 프로그램에서 pthread 사용atfork 함수
fork 호출 전에 다음 코드를 추가합니다.
void prepare()
{
pthread_mutex_lock(&mutex);
}
void infork()
{
pthread_mutex_unlock(&unlock);
}
pthread_atfork(prepare, infork, infork);
Linux 고성능 서버 프로그래밍 학습 노트
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.