繁体   English   中英

信号量和共享内存

[英]Semaphores and shared memory

关于C语言中的多进程编程,我有一个问题,我有几个读取器进程将从一个文件读取到一个共享缓冲区中,并且有几个写入器进程从该缓冲区读取到另一个文件中,为此我们需要使用哪种信号量? 。 以及如何在信号量中使用共享内存。

如果您使用的是Linux,一种简单的选择是使用pshared互斥锁和条件变量。 必须有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_lock锁定和pthread_mutex_unlock解锁。 如果还需要条件变量,则还有一个类似的pthread_condattr_setpshared

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM