第一种 读者优先方案:
#include<pthread.h>
#include<semaphore.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;
sem_t rmutex,wmutex;
int readcount=0,writecount=0,count=0;
void *write(void *id){
sem_wait(&wmutex);
printf("%s: count为 %d , ",(char *)id,count); //CS代码
count++; //CS代码
printf("writecount为 %d , ",writecount); //CS代码
printf("readcount为 %d \n",readcount); //CS代码
sem_post(&wmutex);
}
void *read(void *id){
sem_wait(&rmutex);
if(readcount==0) sem_wait(&wmutex);
readcount++;
sem_post(&rmutex);
printf("%s:count为 %d , ",(char *)id,count); //CS代码
printf("writecount为 %d , ",writecount); //CS代码
printf("readcount为 %d \n",readcount); //CS代码
sem_wait(&rmutex);
readcount--;
if(readcount==0) sem_post(&wmutex);
sem_post(&rmutex);
}
int main() {
pthread_t ti
读者-写者问题(三种实现方案)
最新推荐文章于 2024-04-21 03:33:12 发布