diff --git a/libguile/posix.c b/libguile/posix.c index bfcefaee3..15b38e79c 100644 --- a/libguile/posix.c +++ b/libguile/posix.c @@ -142,7 +142,6 @@ extern char *ttyname(); #endif #include /* from Gnulib */ -#include /* Some Unix systems don't define these. CPP hair is dangerous, but this seems safe enough... */ @@ -1895,36 +1894,6 @@ SCM_DEFINE (scm_setaffinity, "setaffinity", 2, 0, 0, #endif /* HAVE_SCHED_SETAFFINITY */ -SCM_DEFINE (scm_total_processor_count, "total-processor-count", 0, 0, 0, - (void), - "Return the total number of processors of the machine, which\n" - "is guaranteed to be at least 1. A ``processor'' here is a\n" - "thread execution unit, which can be either:\n\n" - "@itemize\n" - "@item an execution core in a (possibly multi-core) chip, in a\n" - " (possibly multi- chip) module, in a single computer, or\n" - "@item a thread execution unit inside a core in the case of\n" - " @dfn{hyper-threaded} CPUs.\n" - "@end itemize\n\n" - "Which of the two definitions is used, is unspecified.\n") -#define FUNC_NAME s_scm_total_processor_count -{ - return scm_from_ulong (num_processors (NPROC_ALL)); -} -#undef FUNC_NAME - -SCM_DEFINE (scm_current_processor_count, "current-processor-count", 0, 0, 0, - (void), - "Like @code{total-processor-count}, but return the number of\n" - "processors available to the current process. See\n" - "@code{setaffinity} and @code{getaffinity} for more\n" - "information.\n") -#define FUNC_NAME s_scm_current_processor_count -{ - return scm_from_ulong (num_processors (NPROC_CURRENT)); -} -#undef FUNC_NAME - #if HAVE_GETPASS SCM_DEFINE (scm_getpass, "getpass", 1, 0, 0, diff --git a/libguile/posix.h b/libguile/posix.h index e2e19ddd2..92f8b3514 100644 --- a/libguile/posix.h +++ b/libguile/posix.h @@ -3,7 +3,8 @@ #ifndef SCM_POSIX_H #define SCM_POSIX_H -/* Copyright (C) 1995,1996,1997,1998,2000,2001, 2003, 2006, 2008, 2009, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2003, 2006, 2008, + * 2009, 2010, 2011 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -91,8 +92,6 @@ SCM_API SCM scm_sethostname (SCM name); SCM_API SCM scm_gethostname (void); SCM_API SCM scm_getaffinity (SCM pid); SCM_API SCM scm_setaffinity (SCM pid, SCM cpu_set); -SCM_API SCM scm_total_processor_count (void); -SCM_API SCM scm_current_processor_count (void); SCM_INTERNAL void scm_init_posix (void); SCM_INTERNAL scm_i_pthread_mutex_t scm_i_locale_mutex; diff --git a/libguile/threads.c b/libguile/threads.c index 4de819395..f49696b1d 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -39,6 +39,7 @@ #endif #include +#include #include "libguile/validate.h" #include "libguile/root.h" @@ -2010,6 +2011,39 @@ scm_c_thread_exited_p (SCM thread) } #undef FUNC_NAME +SCM_DEFINE (scm_total_processor_count, "total-processor-count", 0, 0, 0, + (void), + "Return the total number of processors of the machine, which\n" + "is guaranteed to be at least 1. A ``processor'' here is a\n" + "thread execution unit, which can be either:\n\n" + "@itemize\n" + "@item an execution core in a (possibly multi-core) chip, in a\n" + " (possibly multi- chip) module, in a single computer, or\n" + "@item a thread execution unit inside a core in the case of\n" + " @dfn{hyper-threaded} CPUs.\n" + "@end itemize\n\n" + "Which of the two definitions is used, is unspecified.\n") +#define FUNC_NAME s_scm_total_processor_count +{ + return scm_from_ulong (num_processors (NPROC_ALL)); +} +#undef FUNC_NAME + +SCM_DEFINE (scm_current_processor_count, "current-processor-count", 0, 0, 0, + (void), + "Like @code{total-processor-count}, but return the number of\n" + "processors available to the current process. See\n" + "@code{setaffinity} and @code{getaffinity} for more\n" + "information.\n") +#define FUNC_NAME s_scm_current_processor_count +{ + return scm_from_ulong (num_processors (NPROC_CURRENT)); +} +#undef FUNC_NAME + + + + static scm_i_pthread_cond_t wake_up_cond; static int threads_initialized_p = 0; diff --git a/libguile/threads.h b/libguile/threads.h index 9e44684e1..609262a19 100644 --- a/libguile/threads.h +++ b/libguile/threads.h @@ -230,6 +230,9 @@ SCM_API int scm_pthread_cond_timedwait (pthread_cond_t *cond, SCM_API unsigned int scm_std_sleep (unsigned int); SCM_API unsigned long scm_std_usleep (unsigned long); +SCM_API SCM scm_total_processor_count (void); +SCM_API SCM scm_current_processor_count (void); + #endif /* SCM_THREADS_H */ /* diff --git a/test-suite/tests/posix.test b/test-suite/tests/posix.test index 79f3a92ae..9679042a6 100644 --- a/test-suite/tests/posix.test +++ b/test-suite/tests/posix.test @@ -198,16 +198,3 @@ (setaffinity (getpid) mask) (equal? mask (getaffinity (getpid)))) (throw 'unresolved)))) - -;; -;; nproc -;; - -(with-test-prefix "nproc" - - (pass-if "total-processor-count" - (>= (total-processor-count) 1)) - - (pass-if "current-processor-count" - (and (>= (current-processor-count) 1) - (>= (total-processor-count) (current-processor-count))))) diff --git a/test-suite/tests/threads.test b/test-suite/tests/threads.test index 1166247c4..db002f245 100644 --- a/test-suite/tests/threads.test +++ b/test-suite/tests/threads.test @@ -463,3 +463,17 @@ (lambda () (lock-mutex m)) (lambda key (set! success #t))) success))))) + + +;; +;; nproc +;; + +(with-test-prefix "nproc" + + (pass-if "total-processor-count" + (>= (total-processor-count) 1)) + + (pass-if "current-processor-count" + (and (>= (current-processor-count) 1) + (>= (total-processor-count) (current-processor-count)))))