producer consumer


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users producer consumer
# 1  
Old 12-01-2010
producer consumer

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers.

Can any one help me with the code.

Thanks in advance.

Producer
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define PUB7645 "./PubFile"
union semun {
int val;
struct semid_ds *buf;
ushort *array;
};
int
main() {
int i=0, intValue, semID;
key_t key;
FILE *fptr;
union semun arg;
static ushort startVal[2] = {1, 0};
static struct sembuf acquire = {0, -1, SEM_UNDO},
release = {1, 1, SEM_UNDO};
key = ftok(".", 's');
if ((semID = semget(key, 2, IPC_CREAT | 0666)) == -1) {
perror("Sem Creation:");
exit(2);
}
arg.array = startVal;
if (semctl(semID, 2, SETALL, arg) == -1 ) {
perror("semctl: SETALL");
exit(3);
}
for( ; ; ) {
srand(getpid()+i);
intValue =rand()*49/RAND_MAX + 1;
if (semop(semID, &acquire, 1) == -1) {
perror("Producer waiting");
exit(4);
}
if ((fptr = fopen(PUB7645, "w")) == NULL) {
perror(PUB7645);
exit(1);
}fprintf(fptr, "%d\n", intValue);
fclose(fptr);
if (semop(semID, &release, 1) == -1) {
perror("new");
exit(5);
}
i++;
}
}

Consumer


#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define PUB7645 "./PubFile"
union semun {
int val;
struct semid_ds *buf;
ushort *array;
};
int main() {
int i=0, intValue, semID;
key_t key;
FILE *fptr;
union semun arg;
static struct sembuf acquire = {1, -1, SEM_UNDO},
release = {0, 1, SEM_UNDO};
key = ftok(".", 's');
if ((semID = semget(key, 2, IPC_CREAT | 0666)) == -1) {
perror("Sem Creation:");
exit(2);
}
for(i=1; i<=5 ; i++) {
if (semop(semID, &acquire, 1) == -1) {
perror(“Consumer waiting");
exit(4);
}
if ((fptr = fopen(PUB7645, "r")) == NULL) {
perror(PUB7645);
exit(1);
}
fscanf(fptr, "%d", &intValue);
fclose(fptr);
if (semop(semID, &release, 1) == -1) {
perror(“Release");
exit(4);
}
printf("%d\t", intValue);
}
printf("\nI am process %d. I got five numbers ", getpid());
printf("from a producer as above.\n");
}
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Abnormal producer consumer problem driving me nuts

normally, i hate asking someone to do my homework for me but am getting desperate right now. i have a project about consumer producer problem. the deadline is tonight at 23:55. but i havent gotten it working yet. i just COULDNT get it to work right yet. the problem is as follows: the C - program... (0 Replies)
Discussion started by: alexantosh
0 Replies

2. Homework & Coursework Questions

producer consumer semaphore

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the... (1 Reply)
Discussion started by: gokult
1 Replies

3. UNIX for Dummies Questions & Answers

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (3 Replies)
Discussion started by: gokult
3 Replies

4. Programming

producer consumer semaphore

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the... (0 Replies)
Discussion started by: gokult
0 Replies

5. Shell Programming and Scripting

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (1 Reply)
Discussion started by: gokult
1 Replies

6. Programming

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (0 Replies)
Discussion started by: gokult
0 Replies

7. UNIX for Dummies Questions & Answers

Slow Producer - Fast consumer

I would like to loop through a set of directories, performing operation(s) on each one. The basic script** is dirs=`find . -name .svn -print` for f in $dirs; do echo "Processing $f directory .." done Fine and dandy, but here is the problem: the find expression must complete... (7 Replies)
Discussion started by: jakeo25
7 Replies

8. UNIX for Dummies Questions & Answers

Slow Producer - Fast consumer

I would like to loop through a set of directories, performing operation(s) on each one. The basic script** is dirs=`find . -name .svn -print` for f in $dirs; do echo "Processing $f directory .." done Fine and dandy, but here is the problem: the find expression must complete... (2 Replies)
Discussion started by: jakeo25
2 Replies

9. Programming

producer-consumer problem

The intention of the program. Create N threads with 2 shared memories. One shared memory to write, one shared memory to recieve. Consumer creates 2 shared memory to share with producer. I need H threads for the producer as well(somebody help on it..) Also another question, would segment_id... (2 Replies)
Discussion started by: joey
2 Replies

10. UNIX for Dummies Questions & Answers

Producer/Consumer

Hi all, I have an Producer/Consumer program in C(using shared memory and semaphores).It is working fine with sleep calls after every read/write operation.Each one is a independent program.Now if i remove the sleep calls in consumer,it goes on waiting in the loop till the producer puts some valid... (3 Replies)
Discussion started by: poorni_uma
3 Replies
Login or Register to Ask a Question