GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: src/pin_thread_to_core.cpp Lines: 10 12 83.3 %
Date: 2025-03-16 06:08:08 Branches: 5 12 41.7 %

Line Branch Exec Source
1
2
/***************************************
3
	Auteur : Pierre Aubert
4
	Mail : pierre.aubert@lapp.in2p3.fr
5
	Licence : CeCILL-C
6
****************************************/
7
8
#include <errno.h>
9
#include <stdio.h>
10
#include <stdlib.h>
11
#include <pthread.h>
12
#include <iostream>
13
#include "pin_thread_to_core.h"
14
15
#define handle_error_en(en, msg) \
16
	do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
17
18
using namespace std;
19
20
///Pins the current thread to the current core
21
/**	@return true on success, false otherwise
22
*/
23
40
bool pinThreadToCore(){
24
#ifndef __APPLE__
25
	int s, j;
26
	cpu_set_t cpuset;
27
	pthread_t thread;
28
29
40
	thread = pthread_self();
30
31
	/* Set affinity mask to include CPUs 0 to 7 */
32
33
40
	CPU_ZERO(&cpuset);
34
360
	for (j = 0; j < 8; j++)
35
320
		CPU_SET(j, &cpuset);
36
37
40
	s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
38
40
	if (s != 0){
39
		handle_error_en(s, "pthread_setaffinity_np");
40
		return false;
41
	}
42
	/* Check the actual affinity mask assigned to the thread */
43
44
40
	s = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
45
40
	if (s != 0){
46
		handle_error_en(s, "pthread_getaffinity_np");
47
		return false;
48
	}
49
#endif
50
40
	return true;
51
}
52
53