gpt4 book ai didi

multithreading - 对内置通用Lisp对象的多线程(并行)访问

转载 作者:行者123 更新时间:2023-12-03 13:07:48 25 4
gpt4 key购买 nike

关于Lisp对象的多线程访问的主题出现在https://stackoverflow.com/posts/comments/97440894?noredirect=1的另一篇文章中,但这是一个附带问题,我希望得到进一步的澄清。

通常,Lisp函数(以及特殊形式,宏等)似乎自然地分为对象的访问器和修饰符。共享对象的修饰符在多线程应用程序中显然存在问题,因为同时进行的更新可能会相互干扰(需要保护性锁,原子操作等)。

但是潜在的访问者干扰问题似乎还不清楚。当然,任何访问器都可以编写为包含潜在的修改代码,但是我想认为基本的Lisp访问器操作(如CLHS中指定的并针对各种平台实现)不包含在内。但是,我怀疑出于效率原因可能会有很少的异常(exception)-如果在没有保护的情况下以其他方式在多线程代码中使用这些异常(exception),应该很好地意识到这些异常(exception)。 (我所谈论的异常类型不是像maphash这样的操作,它既可以用作访问器,也可以用作修饰符。)

如果有实现经验的人可以指出至少一个内置的仅访问操作(例如在SBCL或其他来源中),这可能会带来麻烦的修改,这将很有帮助。我知道很难获得保证,但是启发式指导也很有用。

最佳答案

任何执行该操作的代码都将成为支持多线程的实现中的错误。 SBCL使用著名的*world-lock*保护不是线程安全的函数。

如果确实有理由要使用不可变的结构,请使用带有只读defstruct的defconstant(defstruct number (value :read-only t))(defconstant +five+ (make-number 5))

关于multithreading - 对内置通用Lisp对象的多线程(并行)访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55365542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com