我的目标是解决读者作家[1]的问题,但仅使用隔离的过程。一种过程是针对读者的,另一种是针对作者的,我应该使用命名的信号量,以便可以随时启动后续的读者和作者-我也[[不能使用共享内存-纯同步。
更多信息:提供2个实现阅读器的程序,以及一个作家
,这样可以在遵守限制的同时动态启动新进程。注意并发处理的属性:安全性和活动性。还请考虑您的程序是否无死锁。据我了解:sem_wait
那样简单地进行sempthread_mutex_lock
#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]问题,但仅使用隔离的过程。一种过程是针对读者的,一种过程是针对作者的,我应该使用命名信号量,以便可以开始...
我的目标是解决读者作家问题,但仅使用孤立的过程。一种过程是针对读者的,另一种是针对作者的,我应该使用命名信号量,以便可以随时启动后续的读者和作者-同样,我不能使用共享内存-纯同步。