mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
thread::available_parallelism for wasm32-wasip1-threads
The target has limited POSIX support and provides the sysconf function which allows querying the number of available CPUs.
This commit is contained in:
parent
7db7489f9b
commit
f0b7008648
@ -2,7 +2,6 @@
|
||||
|
||||
use crate::ffi::CStr;
|
||||
use crate::num::NonZero;
|
||||
use crate::sys::unsupported;
|
||||
use crate::time::Duration;
|
||||
use crate::{io, mem};
|
||||
|
||||
@ -34,6 +33,8 @@ cfg_if::cfg_if! {
|
||||
#[allow(non_camel_case_types)]
|
||||
pub type pthread_t = *mut ffi::c_void;
|
||||
|
||||
pub const _SC_NPROCESSORS_ONLN: ffi::c_int = 84;
|
||||
|
||||
extern "C" {
|
||||
pub fn pthread_create(
|
||||
native: *mut pthread_t,
|
||||
@ -121,7 +122,7 @@ impl Thread {
|
||||
}
|
||||
} else {
|
||||
pub unsafe fn new(_stack: usize, _p: Box<dyn FnOnce()>) -> io::Result<Thread> {
|
||||
unsupported()
|
||||
crate::sys::unsupported()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -187,5 +188,15 @@ impl Thread {
|
||||
}
|
||||
|
||||
pub fn available_parallelism() -> io::Result<NonZero<usize>> {
|
||||
unsupported()
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(target_feature = "atomics")] {
|
||||
match unsafe { libc::sysconf(libc::_SC_NPROCESSORS_ONLN) } {
|
||||
-1 => Err(io::Error::last_os_error()),
|
||||
0 => Err(io::Error::UNKNOWN_THREAD_COUNT),
|
||||
cpus => Ok(unsafe { NonZero::new_unchecked(cpus as usize) }),
|
||||
}
|
||||
} else {
|
||||
crate::sys::unsupported()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user