Pagini recente » Cod sursa (job #590909) | Cod sursa (job #676906) | Cod sursa (job #1406500) | Cod sursa (job #994428) | Cod sursa (job #2497147)
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#define MAX_RESOURCES 5
int count;
int available_resources = MAX_RESOURCES;
pthread_mutex_t mtx;
int resurse[]={1,2,3,2,2};
void displayResource(int a,int b)
{
printf("GOT %d resources %d remaining\n",a,b);
}
void displayRelease(int a,int b)
{
printf("Released %d resources %d remaining\n",a,b);
}
int decrease_count(int count)
{
pthread_mutex_lock(&mtx);
if(available_resources < count)
{pthread_mutex_unlock(&mtx);
return -1;}
else{
available_resources-=count;
displayRelease(count,available_resources);
pthread_mutex_unlock(&mtx);
}
return 0;
}
int increase_count(int count)
{
pthread_mutex_lock(&mtx);
available_resources += count;
displayResource(count,available_resources);
pthread_mutex_lock(&mtx);
return 0;
}
void * foo(void* v)
{
int recource=*(int *)v;
increase_count(recource);
//AHHHHH
decrease_count(recource);
return NULL;
}
void barrier_point()
{
int N = 5,i,ans=-1;
pthread_t * thread = malloc(sizeof(pthread_t)*N);
printf("NTHRS=%d\n",N);
pid_t tid;
int counter[]={0,1,2,3,4};
for(i=1;i<=N;i++)
{
ans=pthread_create(&thread[i], NULL, (void *(*)(void *)) foo, &counter[i-1]);
if( ans != 0)
{
printf("pthread error!\n");
}
pthread_join(thread[i],NULL);
}
}
/*
void * functie()
{
int *count = (int*) v;
}*/
void * tfun(void * v)
{
int *tid = (int*) v;
printf("%d reached the barrier\n",*tid);
barrier_point();
printf("%d passed the barrier\n",*tid);
free(tid);
return NULL;
}
int main()
{
//Ex 1
printf("MAX_RESOURCES=%d\n",MAX_RESOURCES);
//printf("hey")
int N = 5,i,ans=-1;
pthread_t thread[5];
pid_t tid;
count = 0;
int counter[]={0,1,2,3,4};
if(pthread_mutex_init(&mtx,NULL)) {
perror(NULL);
return errno;
}
for(i=0;i<=N-1;i++)
{
ans=pthread_create(&thread[i], NULL, (void *(*)(void *)) foo, &counter[i-1]);
if( ans != 0)
{
printf("pthread error!\n");
}
}
for(i=0;i<=N-1;i++)
{
pthread_join(thread[i],NULL);
}
//Ex 2
//void * v;
//tfun(v);
}