[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC] Adding threads to Eshell
From: |
Eli Zaretskii |
Subject: |
Re: [RFC] Adding threads to Eshell |
Date: |
Fri, 16 Dec 2022 21:51:24 +0200 |
> Date: Thu, 15 Dec 2022 18:37:09 -0800
> From: Jim Porter <jporterbugs@gmail.com>
>
> However, before I go too far, I wanted to check with other, more
> knowledgeable people: are Emacs threads available on all platforms?
Yes. The only known exception is MSDOS.
> It looks like it requires the pthreads library
pthreads are required only on Posix platforms; on Windows we use
Windows-specific APIs instead. See systhread.c.
> (though my understanding was
> that Emacs threads aren't "real" threads, since there's no good way to
> avoid data races with globals).
No, they are real threads. You can see them with any OS-level tool
that can examine threads. We just let only a single one of these
threads to run at any given time (well, with the exception of very
short time windows).
> A second issue I noticed is that Emacs threads have their own,
> completely separate set of lexical bindings.
Not lexical bindings: local bindings. That is, if you let-bind a
variable, that binding is only seen in the thread that performed the
binding.
> Is it possible to tell a thread that I want to inherit the bindings
> from wherever I called 'make-thread'?
Global bindings are always shared.
> I might be able to avoid this issue, but it would be nice to be able
> to let-bind some defvars and then pass those bindings to an Eshell
> command to do its thing.
If that is what you want, you will have to pass those bindings as
arguments to the thread function.