#include #include #include #include #include #define SHARE 1 sem_t id; //...identyfikator używanego semafora int n; //zmienna globalna na której działać będą wątki void* thread( void *ptr ) { int i = *((int *) ptr); //...z argumentu pobierzemy numer kolejny wątku printf( "wątek %d: start\n",i ); sem_wait( &id ); //...wątek wykonuje P(), wyłączność printf( "wątek %d: krytyczna, start\n",i ); printf( "wątek %d: n = %d\n",i,n ); printf( "wątek %d: n++\n",i ); n++; printf( "wątek %d: n = %d\n",i,n ); printf( "wątek %d: krytyczna, stop\n",i ); sem_post( &id ); //...wątek wykonuje V(), zwolnienie printf( "wątek %d: stop\n",i ); pthread_exit( 0 ); } int main( int argc,char** argv ) { int i[]={1,2}; //tablica numerów wątków pthread_t first,second; sem_init( &id,!SHARE,1 ); //...tworzymysemafor (POSIX, nienazwany) // wątki startują pthread_create( &first, NULL,thread,(void *)(i+0) ); pthread_create( &second, NULL,thread,(void *)(i+1) ); /* tutaj pracują wątki */ pthread_join( first,NULL ); pthread_join(second,NULL ); // wątki zakończyły działanie sem_destroy( &id ); //semafor usunięty return 0; }