Skip to content

Latest commit

 

History

History
23 lines (21 loc) · 682 Bytes

pthread_cancel.md

File metadata and controls

23 lines (21 loc) · 682 Bytes

tokio 协程可以用 handle.abort() 中止执行,不过标准库线程 spawn 就没有 stop 的方法,得用 Linux glibc 的 API

use std::os::unix::prelude::JoinHandleExt;
let handle = std::thread::spawn(|| {
    loop {
        unsafe {
            dbg!(libc::time(std::ptr::null_mut()));
            libc::sleep(1);
        }
    }
});
let pthread_t = handle.into_pthread_t();
unsafe {
    // libc::pthread_join(pthread_t, std::ptr::null_mut());
    libc::pthread_cancel(pthread_t);
    libc::pthread_cancel(pthread_t);
    libc::pthread_cancel(pthread_t);
    // libc::pthread_kill(pthread_t, libc::SIGTERM);
}