命名信号量而不是互斥量-没有多线程的读者作者问题

问题描述 投票:-1回答:2

我的目标是解决读者作家[1]的问题,但仅使用隔离的过程。一种过程是针对读者的,另一种是针对作者的,我应该使用命名的信号量,以便可以随时启动后续的读者和作者-我也[[不能使用共享内存-纯同步。

更多信息:提供

2个实现阅读器的程序,以及一个作家

,这样可以在遵守限制的同时动态启动新进程。注意并发处理的属性:安全性和活动性。还请考虑您的程序是否无死锁据我了解:

    我不应该使用pthread,而应该像sem_wait那样简单地进行sempthread_mutex_lock
  • 我无法使用共享内存-仅sem_init(&semaphore,0,initial_val)
  • 编辑:(代码已编辑,我尝试使用fork)

    #include <stdlib.h> #include <semaphore.h> #include <stdio.h> #include <sys/mman.h> #include "asm/unistd.h" #include <unistd.h> #include <fcntl.h> sem_t wrt, m; int counter = 0; int cnt=1; void writer(int numWriter) { sem_wait(&wrt); cnt = cnt*2; printf("writer %d modified cnt to %d\n", numWriter, cnt); sem_post(&wrt); return; } void reader(int numReader) { sem_wait(&m); counter++; if(counter==1){ sem_wait(&wrt); } sem_post(&m); printf("Reader %d: %d", numReader,cnt); sem_wait(&m); counter--; if(counter == 0){ sem_post(&wrt); } sem_post(&m); return; } int main() { sem_init(&m, 1, 1); sem_init(&wrt, 1, 1); pid_t pid = fork(); if (!pid) reader(1); else { pid = fork(); if (pid!=0){ writer(1); } else { pid = fork(); if (!pid) reader(2); else writer(2); sem_close(&wrt); sem_close(&m); } } return 0; }

    给我一个错误:

    In function `writer': readwrite.c:(.text+0x13): undefined reference to `sem_wait' readwrite.c:(.text+0x49): undefined reference to `sem_post'

    'reader''main'发生相同的错误>

    [1]:读者和作家:阅览室的容量为n读者。读者来到阅览室,分配一个地方,占据一段时间,然后离开。一段时间后,它们再次出现,然后重复该过程。阅读室也被作家使用。但是,作家只能在阅览室是空的时候工作,即必须没有其他读者或作家。作家在房间里呆了一段时间,然后离开,过了一会儿再回来

    我的目标是解决读者作家[1]问题,但仅使用隔离的过程。一种过程是针对读者的,一种过程是针对作者的,我应该使用命名信号量,以便可以开始...

  • c linux concurrency fork semaphore
    2个回答
    0
    投票
    我的目标是解决读者作家问题,但仅使用孤立的过程。一种过程是针对读者的,另一种是针对作者的,我应该使用命名信号量,以便可以随时启动后续的读者和作者-同样,我不能使用共享内存-纯同步。

    -1
    投票
    您提到您必须使用“隔离的进程”,但据我所知,线程不是进程。要创建新进程,您必须使用fork()。
    © www.soinside.com 2019 - 2024. All rights reserved.