writer.c
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
#include"Writer.h"
#include"WriterReaderUtilities.h"
void writer_data(WriterReaderManager_t *WriterReaderMgr,int threadIdx){
sem_t *mutex= &(WreterReaderMgr->mutex);
int i=0;
semWait(mutex);
for(i=0;i<NUMBER_COUNT-1;i++){
int datacount=rand()%26;
WriterReaderMgr->buffer[i]=datacount+'a';
}
WriterReaderMgr->buffer[i]='\0';
printf("writer:%d,write the data:%s\n",threadIdx,WriterReaderMgr->buffer);
semSignal(mutex);
}
void *writerThread(void *arg){
ThreadStruct_t *curThreadStruct = (ThreadStruct_t *)arg;
WriterReaderManager_t *WreterReaderMgr=curThreadStruct->WriterReaderMgr;
srand(curThreadStruct->threadIdx);
while(curThreadStruct->WreterReaderMgr->exit_flag == 0){
writer_data(WreterReaderMgr,curThreadStruct->threadIdx);
sleep(WAIT_TIME_IN_SECOND);
}
return arg;
}
第一题makefile
CC=gcc
CFLAGS = -g -Wall -lpthread
OBJS =ProducerConsumerUtilities.o Consumer.o Producer.o mainProg.o
TARGET = mainProg
$(TARGET): $(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
clean:
rm -rf *.o $(TARGET)
第二题
CC=gcc
CFLAGS = -g -Wall -lpthread
OBJS =ProducerWriterUtilities.o Writer.o Reader.o mainProg.o
TARGET = mainProg
$(TARGET): $(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
clean:
rm -rf *.o $(TARGET)