#include #include #include #include static struct thread_data { unsigned long mib; } td; static void *worker(void *data) { struct thread_data *td = data; unsigned long index; size_t size; char *buf; int i, first = 1; size = td->mib * 1024UL * 1024UL; buf = malloc(size); for (i = 0; i < 100000; i++) { for (index = 0; index + 4096 < size; index += 4096) memset(&buf[index+512], 0x89, 512); if (first) { printf("loop%d: did %lu MiB\n", i+1, size/(1024UL*1024UL)); first = 0; } } return NULL; } int main(int argc, char *argv[]) { unsigned long mib, threads; pthread_t *pthreads; int i; if (argc < 3) { printf("%s: \n", argv[0]); return 1; } mib = strtoul(argv[1], NULL, 10); threads = strtoul(argv[2], NULL, 10); pthreads = calloc(threads, sizeof(pthread_t)); td.mib = mib; for (i = 0; i < threads; i++) pthread_create(&pthreads[i], NULL, worker, &td); for (i = 0; i < threads; i++) { void *ret; pthread_join(pthreads[i], &ret); } return 0; }