Facebook
From Commodious Cat, 3 Years ago, written in C#.
This paste is a reply to Re: Re: Re: Re: Re: ss from Gracious Macaw - view diff
Embed
Download Paste or View Raw
Hits: 117
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/stat.h>
  5. #include <sys/sem.h>
  6. union semun //...struktura potrzebna dla semctl()
  7. {
  8.  int value; struct semid_ds *stat;
  9.  unsigned short int *array; struct seminfo *info;
  10. };
  11. int main( int argc,char** argv )
  12. {
  13. key_t key;
  14. int semid,flag;
  15. struct sembuf P={ 0,-1,0}; //...żądanie dostępu {numer,operacja,flaga}
  16. struct sembuf V={ 0,+1,0}; //...zwolnienie zasobu {numer,operacja,flaga}
  17. union semun control;
  18. int i,p,k,n;
  19. double x;
  20. if( argc<2 ) //...sprawdźmy, czy aby wywołanie jest poprawne
  21. {
  22. printf( "%s %s\n %s\n",argv[0],"[n]","n-krotność wykonania procesu" );
  23. exit( 1 );
  24. }
  25. sscanf( argv[1],"%d",&p ); //...jeżeli tak, to czytamy ilość powtórzeń
  26. key = ftok( "/tmp", 'k'+'m' ); flag = IPC_CREAT | S_IRUSR | S_IWUSR;
  27. semid = semget( key,1,flag); //... tworzymy tablicę semaforów (pojedynczy)
  28. control.value = 1; //...inicjowanie semafora (binarnego) wartością 1
  29. semctl( semid,0x0,SETVAL,control );
  30. switch( fork() ) //...utworzenie procesu potomnego
  31. {
  32. case -1: //...obsługa błędu fork
  33. printf( "!.!.!...fork()...!.!.!\n" ); exit( 1 ); break;
  34. case 0: //...kod dla procesu potomnego
  35. printf( "...[%u]...proces potomny.......start\n",(unsigned)getpid());
  36. fflush( stdout ); break;
  37. default://...kod dla procesu macierzystego
  38. printf( "...[%u]...proces macierzysty...start\n",(unsigned)getpid());
  39. fflush( stdout ); break;
  40. }
  41. for( i=0;i<p;i++ )
  42. {
  43. semop( semid,&P,1 );
  44. //...początek sekcji krytycznej
  45. printf(" [%u]...rozpoczyna wykonywanie sekcji krytycznej\n",
  46. (unsigned)getpid());
  47. n = rand();
  48. for( k=0,x=0;k<n;k++ ){ x += (double)rand()/RAND_MAX; }
  49. printf( " n=%d x=%f\n",n,x/(double)n ); fflush( stdout );
  50. printf(" [%u]...kończy wykonywanie sekcji krytycznej\n",
  51. (unsigned)getpid() );
  52. //...koniec sekcji krytycznej
  53. semop( semid,&V,1 );
  54. }
  55. semctl( semid,0x0,IPC_RMID,control ); //...usuwamy tablicę semaforów
  56. return 0;
  57. }

Replies to Re: Re: Re: Re: Re: Re: ss rss

Title Name Language When
Re: Re: Re: Re: Re: Re: Re: ss Sloppy Finch csharp 3 Years ago.