gpt4 book ai didi

c - 添加带有互斥锁的共享内存组件后进程池不工作

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:40 24 4
gpt4 key购买 nike

我正在用 C 编写一个小型 Web 服务器,该服务器应该使用进程池为多个客户端请求提供服务。在添加共享内存组件来存储服务器发送的流量之前,进程池运行良好。所有请求之前都由不同的进程处理。现在它们都由同一个进程处理。我没有将代码更改为 fork() 子进程,这让我感到困惑......

typedef struct {
long int traffic;
pthread_mutex_t muxlock;
} shmem;

/*Creating the shared memory and,setting its size, closing | Initializing the mutex*/
shm_unlink("/sum_traffic");
int shmfd = shm_open("/sum_traffic", O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); //Creates the shared memory
ftruncate(shmfd,sizeof(int)*8+sizeof(shmem)); //Sets the size of the shared memory
shmem *memptr = mmap(NULL, (sizeof(int)*8+sizeof(shmem)), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd,0); //Maps a pointer for us to work with
pthread_mutex_init(&(*memval).muxlock,NULL); //Initialize the mutex lock

//Forking 10 worker processes
int i;
for(i=0; i<11;i++){
if(pid>0){
pid=fork();
}
}

if(pid < 0){
fprintf(stderr, "Error forking, error: %d\n",errno);
exit(EXIT_FAILURE);
}

//Worker-processes
while(1)
if(pid == 0){
//Accept connection on list_s
if((conn_s = accept(list_s, NULL, NULL)) < 0){
fprintf(stderr , "Error calling accept \n");
exit(EXIT_FAILURE);
}
httpRequest request;
request = parseRequest(getMessage(conn_s)); //Parses the http GET request
headertraffic=selectHeader(conn_s,request.returncode); //Selects a Header file to send
currenttraffic=printFile(conn_s,request.filename); //Serves the requested file
pthread_mutex_lock(&(*memval).muxlock); //Lock the mutex to write to shared memory
(*memval).traffic=((*memval).traffic+currentdata+headerdata);
pthread_mutex_unlock(&(*memval).muxlock); // Unlock mutex
printf("PID: %d\n",getpid());
(void)close(conn_s);
}

非常感谢您的帮助!

最佳答案

不确定这是否是您的真实代码,但一些错误检查会有所帮助。

这可能不是您的问题,但一个影响因素是您没有将互斥锁设置为由多个进程共享。您不能在 pthread_mutex_init() 中使用默认属性。您必须使用 pthread_mutexattr_init() 初始化互斥属性,然后调用pthread_mutexattr_setpshared(),然后调用pthread_mutex_init()`。

关于c - 添加带有互斥锁的共享内存组件后进程池不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com