我有一个关于C中多进程编程的问题,我有几个读取器进程将从一个文件读入一个共享缓冲区,几个编写器进程从缓冲区读取到另一个文件,我们需要什么类型的信号量用于此。以及如何将共享内存与信号量一起使用。
答案 0 :(得分:1)
如果您使用的是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
。