java, c#, vb:我们可以在不依赖本机实现的情况下编写线程安全函数吗?

本文关键字:线程 情况下 安全 函数 实现 依赖 我们 vb java 本机 | 更新日期: 2023-09-27 17:52:17

我想知道是否有可能用语言本身编写锁定功能(用于线程)(这个问题纯粹是学术性的,我知道即使可能也没有人会这样做(不是我))?

换句话说:

A)在Java中,是否有可能单独使用Java编写线程安全函数,但不使用任何提供此功能的类/语言元素/语法?

B)在c#中,是否有可能单独使用c#编写线程安全函数,但不使用提供此功能的任何提供的类/语言元素/语法?

C)在Vb中,是否有可能单独使用Vb编写线程安全函数,但不使用提供此功能的任何提供的类/语言元素/语法?

java, c#, vb:我们可以在不依赖本机实现的情况下编写线程安全函数吗?

如果你有原子读和写,比如c#对int类型,你可以使用Dekker的算法来构建线程安全的算法,而不需要任何其他原语的支持:

  • 德克的算法

是的,这是可能的,形成互斥锁真正需要的是一个共享内存变量,该变量在单个读-修改-写机器周期中写入。但是,它的效率很低,因为处于潜在冲突中的所有线程都必须忙等待。在这些语言的线程争用避免类中,更高级的结构的一个主要观点是,允许一个线程停止执行,直到另一个线程处理完冲突的资源,然后在资源释放时立即被放回执行队列。

我想你可能在想:

C# lock()
VB SyncLock
Java syncronized

这些是语言元素,而不是标准库类。

No。如果你有一个线程安全的程序,你必须使用一些提供线程安全的类/语言元素/语法。

volatile在Java中的语义定义在Java语言规范第17节,"Threads and Locks"