Multithreading 字节码/中间语言/编译器后端中的可移植多线程支持?

Multithreading 字节码/中间语言/编译器后端中的可移植多线程支持?,multithreading,compiler-construction,bytecode,cil,llvm-ir,Multithreading,Compiler Construction,Bytecode,Cil,Llvm Ir,我一直在为一种需要多线程支持的编程语言开发解析器。在研究编译器的后端应该是什么的时候,我注意到我找不到很多关于多线程的信息,比如CIL、LLVM-IR、gcc-RTL或JVM字节码。我可以找到一些关于如何使这样的代码线程安全的参考资料,但没有找到关于如何创建或分叉线程的参考资料。我当然可以使用信号或其他东西直接与操作系统接口,但这是不可移植的,而且容易出错 是不是在这些低级语言中根本没有可移植的方式来管理线程?我应该编译成像C这样的高级语言吗?在JVM字节码中,您可以使用任何Java库,包括那些

我一直在为一种需要多线程支持的编程语言开发解析器。在研究编译器的后端应该是什么的时候,我注意到我找不到很多关于多线程的信息,比如CIL、LLVM-IR、gcc-RTL或JVM字节码。我可以找到一些关于如何使这样的代码线程安全的参考资料,但没有找到关于如何创建或分叉线程的参考资料。我当然可以使用信号或其他东西直接与操作系统接口,但这是不可移植的,而且容易出错


是不是在这些低级语言中根本没有可移植的方式来管理线程?我应该编译成像C这样的高级语言吗?

在JVM字节码中,您可以使用任何Java库,包括那些与线程一起工作的库。创建线程的传统方法是

    new Thread() {
        @Override
        public void run() {
            /// code
        }
    }.start();
这段代码是用Java编写的。使用javap可以看到相应的JVM字节码:

   0: new           #2                  // class Main$1
   3: dup           
   4: invokespecial #3                  // Method Main$1."<init>":()V
   7: invokevirtual #4                  // Method Main$1.start:()V
   10: return        
0:new#2//class Main$1
3:dup
4:invokespecial#3//methodmain$1.“:()V
7:invokevirtual#4//方法Main$1.start:()V
10:返回
主要$1是一个类:

final class Main$1 extends java/lang/Thread  {

  // compiled from: Intf.java
  OUTERCLASS Main main ([Ljava/lang/String;)V
  // access flags 0x8
  static INNERCLASS Main$1 null null

  // access flags 0x0
  <init>()V
   L0
    LINENUMBER 7 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Thread.<init> ()V
    RETURN
   L1
    LOCALVARIABLE this LMain$1; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1

  // access flags 0x1
  public run()V
   L0
    LINENUMBER 11 L0
    RETURN
   L1
    LOCALVARIABLE this LMain$1; L0 L1 0
    MAXSTACK = 0
    MAXLOCALS = 1
}
final类Main$1扩展了java/lang/Thread{
//编译自:Intf.java
OUTERCLASS Main([Ljava/lang/String;)V
//访问标志0x8
静态INNERCLASS Main$1 null
//访问标志0x0
()V
L0
7号线L0
阿洛德0
调用特殊的java/lang/Thread。()V
返回
L1
LOCALVARIABLE此LMain$1;L0 L1 0
MAXSTACK=1
最大局部数=1
//访问标志0x1
公营
L0
线路号11 L0
返回
L1
LOCALVARIABLE此LMain$1;L0 L1 0
MAXSTACK=0
最大局部数=1
}

这段代码的可移植性非常好。

我不知道CIL,但在JVM上,创建和管理线程是通过标准库完成的。我想CIL也是如此。此外,C中的线程化是一场噩梦。谢谢。不幸的是,我不确定JVM是否是一个现实的目标,因为这种语言使用了,但我没有意识到ul Java库是。