#include #include #include int* data; void* thread_func(void* arg) { unsigned start_index = *((int*) arg); unsigned array_size = *((int*) arg + 1); int stride = *((int*) arg + 2); int accessno = *((int*) arg + 3); unsigned element, i; int a = 0; //printf("start_index=%d array_size=%d\n", start_index,array_size); for (i = start_index; i < array_size; i += stride) { if (++a > accessno) break; //printf(" i=%d a=%d\n", i, a); element = data[i]; } printf("element=%d a=%d\n", element, a-1); pthread_exit(NULL); } int main(int argc, char* argv[]) { unsigned array_size = 100; int thread_count = 1; int stride = 10; int accessno = 10; if (argc < 4) { printf("Usage: array_size thread_count stride_size access_number\n"); return 1; } array_size = atoi(argv[1]); thread_count = atoi(argv[2]); stride = atoi(argv[3]); accessno = atoi(argv[4]); printf("Array size : %u\n", array_size); printf("No. threads: %d\n", thread_count); printf("Stride size: %d\n", stride); printf("Access num : %d\n", accessno); // allocate the array data = (unsigned*) malloc(array_size * sizeof(int)); if (data == NULL) { fprintf(stderr, "Error: failed to allocate memory for the array.\n"); exit(EXIT_FAILURE); } // create an array of thread ids pthread_t threads[thread_count]; int thread_args[thread_count][4]; int thread_starts[thread_count]; for (int i = 0; i < thread_count; i++) { // generate a random starting index for the thread thread_args[i][0] = rand() % stride + i; thread_args[i][1] = array_size; thread_args[i][2] = stride; thread_args[i][3] = accessno; } for (int i = 0; i < thread_count; i++) pthread_create(&threads[i], NULL, thread_func, (void*) &thread_args[i]); for (int i = 0; i < thread_count; i++) pthread_join(threads[i], NULL); return 0; }