単純なリーダー/ライターの問題を解決しています。私は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
関数parent.c
は実行されません。
私がやりたいことは、3 つのファイルparent.h
すべてで使用するために、いくつかのグローバル変数を宣言することです。.c