#include #include //#include #include #include #include //#include #include #define MAX_THREADS 50 #define MAX_REGION_ENTRIES 10 void* thread_function(void *ptr); void enter_region(size_t id); void leave_region(size_t id); int cancel_threads = 0; sem_t region_semaphore; pthread_mutex_t region_mutex = PTHREAD_MUTEX_INITIALIZER; size_t regionentries[MAX_REGION_ENTRIES]; int main(int argc, char *argv[]) { pthread_attr_t attr; pthread_t threads[MAX_THREADS]; size_t i, counter = 0; // 0=local process, MAX_REGION_ENTRIES=initial state if ( sem_init( ®ion_semaphore, 0, MAX_REGION_ENTRIES ) == 0 ) { if ( pthread_attr_init( &attr ) == 0 ) { for (i=0; itm_sec+localtime(&t)->tm_min)*1000 ); leave_region(threadid); sched_yield(); // yield CPU } printf("Thread %zu finished!\n", threadid); return 0; } void print_region_entries() { int i; printf("Threads in region: "); for (i=0; i