我正在解决一个简单的读者/作家问题。我有 3 个.c
文件和 3 个.h
文件。
parent.c
:
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <semaphore.h>
#include "parent.h"
#include "reader.h"
#include "writer.h"
int main(){
printf("Aeeeee ");
globalVariable = 0;
readers = 0;
max = 25;
sem_init(&waitSema, 0, 0);
sem_init(&globalSema, 0, 0);
sem_init(&rdSema, 0, 0);
pthread_t * array [max];
int mda = 0;
int i;
for(i = 0; i < max; i++){
pthread_t * thr = malloc(sizeof(pthread_t));
array[i] = thr;
mda = rand()%100;
if(mda > 50){
pthread_create(array[i], NULL, writer, NULL);
}else{
pthread_create(array[i], NULL, reader, NULL);
}
}
for(i=0; i<max; i++){
pthread_join(*array[i], NULL);
}
}
reader.c
:
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <semaphore.h>
#include "reader.h"
#include "parent.h"
void * reader (void * param){
sem_wait(&waitSema);
sem_wait(&rdSema);
if(readers == 0){
sem_wait(&globalSema);
}
readers++;
sem_post(&rdSema);
sem_post(&waitSema);
printf("Reader : %d\n", globalVariable);
sem_wait(&rdSema);
readers--;
if(readers == 0){
sem_post(&globalSema);
}
sem_post(&rdSema);
}
writer.c
:
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <semaphore.h>
#include "writer.h"
#include "parent.h"
void * writer (void * param){
sem_wait(&waitSema);
sem_wait(&globalSema);
sem_post(&waitSema);
globalVariable++;
printf("Writer : %d\n", globalVariable);
sem_post(&globalSema);
}
parent.h
:
sem_t waitSema;
sem_t globalSema;
sem_t rdSema;
int globalVariable;
int readers;
int max;
reader.h
:
void * reader (void * param);
writer.h
:
void * writer (void * param);
我用这个命令编译代码: gcc -pthread parent.c reader.c writer.c -o out
,但是当我运行时./out
没有任何反应。main
函数 fromparent.c
不执行。
我想要做的是声明一些全局变量,parent.h
以便在所有 3 个.c
文件中使用它们。