sched_getcpu() and pthread_setaffinity_np() are non-portable

Reported by Yuri Victorovich, on FreeBSD.

* configure.ac: Test for them.
* spot/mc/mc_instanciator.hh: Only use them if they are present.
* NEWS: Mention the fix.
This commit is contained in:
Alexandre Duret-Lutz 2021-11-22 10:23:14 +01:00
parent 5f49209caf
commit 2a408bbed1
3 changed files with 14 additions and 5 deletions

3
NEWS
View file

@ -5,6 +5,9 @@ New in spot 2.10.1.dev (not yet released)
- twa_graph::purge_dead_states() now also removes edges labeled by - twa_graph::purge_dead_states() now also removes edges labeled by
bddfalse. bddfalse.
- only use sched_getcpu() and pthread_setaffinity_np() when they are
available.
New in spot 2.10.1 (2021-11-19) New in spot 2.10.1 (2021-11-19)
Build: Build:

View file

@ -148,7 +148,12 @@ CHECK_ATOMIC
AX_CHECK_BUDDY AX_CHECK_BUDDY
AC_CHECK_HEADERS([sys/times.h valgrind/memcheck.h spawn.h]) AC_CHECK_HEADERS([sys/times.h valgrind/memcheck.h spawn.h])
AC_CHECK_FUNCS([times kill alarm sigaction]) AC_CHECK_FUNCS([times kill alarm sigaction sched_getcpu])
oLIBS=$LIBS
LIBS="$LIBS -lpthread"
AC_CHECK_FUNCS([pthread_setaffinity_np])
LIBS=$oLIBS
LT_CONFIG_LTDL_DIR([ltdl]) LT_CONFIG_LTDL_DIR([ltdl])
LT_INIT([win32-dll]) LT_INIT([win32-dll])

View file

@ -19,6 +19,8 @@
#pragma once #pragma once
#include <spot/misc/common.hh>
#include <spot/misc/_config.h>
#include <string> #include <string>
#include <thread> #include <thread>
#include <vector> #include <vector>
@ -31,7 +33,6 @@
#include <spot/mc/cndfs.hh> #include <spot/mc/cndfs.hh>
#include <spot/mc/bloemen.hh> #include <spot/mc/bloemen.hh>
#include <spot/mc/bloemen_ec.hh> #include <spot/mc/bloemen_ec.hh>
#include <spot/misc/common.hh>
#include <spot/misc/timer.hh> #include <spot/misc/timer.hh>
namespace spot namespace spot
@ -115,7 +116,7 @@ namespace spot
{ {
threads[i] = std::thread ([&swarmed, &iomutex, i, &barrier] threads[i] = std::thread ([&swarmed, &iomutex, i, &barrier]
{ {
#if defined(unix) || defined(__unix__) || defined(__unix) #ifdef SPOT_HAVE_SCHED_GETCPU
{ {
std::lock_guard<std::mutex> iolock(iomutex); std::lock_guard<std::mutex> iolock(iomutex);
std::cout << "Thread #" << i std::cout << "Thread #" << i
@ -129,8 +130,8 @@ namespace spot
swarmed[i]->run(); swarmed[i]->run();
}); });
#if defined(unix) || defined(__unix__) || defined(__unix) #ifdef SPOT_PTHREAD_SETAFFINITY_NP
// Pins threads to a dedicated core. // Pin threads to a dedicated core.
cpu_set_t cpuset; cpu_set_t cpuset;
CPU_ZERO(&cpuset); CPU_ZERO(&cpuset);
CPU_SET(i, &cpuset); CPU_SET(i, &cpuset);