信号量和共享内存

时间:2011-06-20 16:04:38

标签: c multiprocessing semaphore shared-memory

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

1 个答案:

答案 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