Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <semaphore.h>
  5. #include <unistd.h>
  6.  
  7. typedef struct {
  8.     int money;
  9. } account_t;
  10.  
  11. account_t acc[3];
  12. sem_t sem[3];
  13.  
  14. void *mainThread(void* arg) {
  15.     int index=*((int*)arg);
  16.     srand((unsigned int)pthread_self());
  17.     int r,rValue;
  18.     while(1) {
  19.         r=rand()%9;
  20.         sleep(r);
  21.        
  22.         sem_wait(&sem[index]);
  23.         printf("Saldo%d : %d\n",index,acc[index].money);
  24.         sem_post(&sem[index]);
  25.        
  26.         r=rand()%5;
  27.         rValue=1000+rand()%5001;
  28.        
  29.         sem_wait(&sem[index]);
  30.         printf("Saldo%d : %d-%d=%d\n",index,acc[index].money,rValue,acc[index].money-rValue);
  31.         acc[index].money-=rValue;
  32.         sem_post(&sem[index]);
  33.        
  34.         sem_wait(&sem[3-index]);
  35.         printf("Saldo%d : %d+%d=%d\n",3-index,acc[3-index].money,rValue,acc[3-index].money+rValue);
  36.         acc[3-index].money+=rValue;
  37.         sem_post(&sem[3-index]);
  38.         sleep(r);
  39.     }
  40.  
  41.  
  42.     pthread_exit(NULL);
  43. }
  44.  
  45. int main(int argc, char **argv) {
  46.     sem_init(&sem[1],0,1);
  47.     sem_init(&sem[2],0,1);
  48.     acc[1].money=acc[2].money=100000;
  49.     pthread_t usr1,usr2;
  50.     int usrIndex1=1,usrIndex2=2;
  51.     pthread_create(&usr1,NULL,mainThread,&usrIndex1);
  52.     pthread_create(&usr2,NULL,mainThread,&usrIndex2);
  53.     while(1) {
  54.         //
  55.     }
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement