gpt4 book ai didi

c - 信号量和共享内存

转载 作者:行者123 更新时间:2023-11-30 16:01:33 25 4
gpt4 key购买 nike

我有一个关于 C 语言多进程编程的问题,我有几个读取器进程将从文件读取到共享缓冲区,还有几个写入器进程从缓冲区读取到另一个文件,我们需要什么类型的信号量用于此。以及我们如何通过信号量使用共享内存。

最佳答案

如果您使用的是 Linux,一个简单的选择是使用 pshared mutexes和条件变量。需要一个最新版本的 glibc。本质上,在您的共享内存段中,您将拥有类似以下内容的内容:

struct shmem_head {
pthread_mutex_t mutex;
};

初始化:

void init_shmem_head(struct shmem_head *head)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED );

pthread_mutex_init(&head->mutex, &attr);
pthread_mutexattr_destroy(&head->mutex);
}

您现在拥有一个互斥体,由所有进程共享且共享内存段处于打开状态。您可以像平常一样简单地使用 pthread_mutex_lock 进行锁定,并使用 pthread_mutex_unlock 进行解锁。还有类似的pthread_condattr_setpshared如果您也想要条件变量。

关于c - 信号量和共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6414160/

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