mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 20:00:19 +02:00
Move {total,current}-processor-count' outside of
posix.c'.
* libguile/posix.c (scm_total_processor_count, scm_current_processor_count): Move to... * libguile/threads.c: ... here. * libguile/posix.h (scm_total_processor_count, scm_current_processor_count): Move declarations to... * libguile/threads.h: ... here. * test-suite/tests/posix.test ("nproc"): Move tests to... * test-suite/tests/threads.test: ... here.
This commit is contained in:
parent
bbec460245
commit
d20912e67d
6 changed files with 53 additions and 47 deletions
|
@ -142,7 +142,6 @@ extern char *ttyname();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/file.h> /* from Gnulib */
|
#include <sys/file.h> /* from Gnulib */
|
||||||
#include <nproc.h>
|
|
||||||
|
|
||||||
/* Some Unix systems don't define these. CPP hair is dangerous, but
|
/* Some Unix systems don't define these. CPP hair is dangerous, but
|
||||||
this seems safe enough... */
|
this seems safe enough... */
|
||||||
|
@ -1895,36 +1894,6 @@ SCM_DEFINE (scm_setaffinity, "setaffinity", 2, 0, 0,
|
||||||
|
|
||||||
#endif /* HAVE_SCHED_SETAFFINITY */
|
#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
|
#if HAVE_GETPASS
|
||||||
SCM_DEFINE (scm_getpass, "getpass", 1, 0, 0,
|
SCM_DEFINE (scm_getpass, "getpass", 1, 0, 0,
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
#ifndef SCM_POSIX_H
|
#ifndef SCM_POSIX_H
|
||||||
#define 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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* 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_gethostname (void);
|
||||||
SCM_API SCM scm_getaffinity (SCM pid);
|
SCM_API SCM scm_getaffinity (SCM pid);
|
||||||
SCM_API SCM scm_setaffinity (SCM pid, SCM cpu_set);
|
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 void scm_init_posix (void);
|
||||||
|
|
||||||
SCM_INTERNAL scm_i_pthread_mutex_t scm_i_locale_mutex;
|
SCM_INTERNAL scm_i_pthread_mutex_t scm_i_locale_mutex;
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <nproc.h>
|
||||||
|
|
||||||
#include "libguile/validate.h"
|
#include "libguile/validate.h"
|
||||||
#include "libguile/root.h"
|
#include "libguile/root.h"
|
||||||
|
@ -2010,6 +2011,39 @@ scm_c_thread_exited_p (SCM thread)
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#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 scm_i_pthread_cond_t wake_up_cond;
|
||||||
static int threads_initialized_p = 0;
|
static int threads_initialized_p = 0;
|
||||||
|
|
||||||
|
|
|
@ -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 int scm_std_sleep (unsigned int);
|
||||||
SCM_API unsigned long scm_std_usleep (unsigned long);
|
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 */
|
#endif /* SCM_THREADS_H */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -198,16 +198,3 @@
|
||||||
(setaffinity (getpid) mask)
|
(setaffinity (getpid) mask)
|
||||||
(equal? mask (getaffinity (getpid))))
|
(equal? mask (getaffinity (getpid))))
|
||||||
(throw 'unresolved))))
|
(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)))))
|
|
||||||
|
|
|
@ -463,3 +463,17 @@
|
||||||
(lambda () (lock-mutex m))
|
(lambda () (lock-mutex m))
|
||||||
(lambda key (set! success #t)))
|
(lambda key (set! success #t)))
|
||||||
success)))))
|
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)))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue