⛏️ index : haiku.git

/*
 * Copyright 2023, JΓ©rΓ΄me Duval, jerome.duval@gmail.com. All rights reserved.
 * Distributed under the terms of the MIT License.
 */


#include <pthread.h>
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int
main(int argc, char** argv)
{
	if (argc != 2)
		exit(1);
	if (strcmp(argv[1], "off") != 0) {
		printf("with affinity on CPU 1\n");
		pthread_t thread = pthread_self();
		cpuset_t cpuset;
		CPU_ZERO(&cpuset);
		CPU_SET(1, &cpuset);
		if (CPU_COUNT(&cpuset) != 1) {
			fprintf(stderr, "CPU_COUNT failed\n");
			exit(1);
		}
		if (pthread_setaffinity_np(thread, sizeof(cpuset_t), &cpuset) != 0) {
			fprintf(stderr, "pthread_setaffinity_np failed\n");
			exit(1);
		}
		if (pthread_getaffinity_np(thread, sizeof(cpuset_t), &cpuset) != 0) {
			fprintf(stderr, "pthread_getaffinity_np failed\n");
			exit(1);
		}
		if (!CPU_ISSET(1, &cpuset))
			fprintf(stderr, "affinity not on CPU 1\n");
		if (sched_getcpu() != 1)
			fprintf(stderr, "not running on CPU 1\n");
	} else {
		printf("without affinity\n");
	}
	int* p;
	while (true)
		(*p)++;
	return *p;
}