2011-06-20 56 views
0

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

+1

什么操作系统?你使用任何多处理特定的库? – nmichaels

+0

的Linux这里都是我包括在该文件的标题, 的#include 的#include 的#include 的#include 的#include 的#include 的#include 的#include 的#include #include #include 希望这有助于 – MRK

回答

1

如果你在linux上,一个简单的选择是使用pshared mutexes和条件变量。 glibc的recet版本将是必要的。基本上你的共享内存段里面,你会碰到这样的:

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