Mono在Ubuntu线程崩溃

时间:2017-04-12 18:07:46

标签: c# mono ubuntu-16.04

我的程序(如下)适用于Fedora 22,或者我直接从main()调用线程函数。但是如果我在Ubuntu 16.04上的一个线程中启动单声道调用,它就会这样断言。我做错了吗?

Howard Rubin

输出:

$ rm monotest.dll ; make ; ./monotest 
Mono C# compiler version 4.8.0.0 
mcs monotest.cs /out:monotest.dll /target:library 
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 
g++ monotest.cpp -o monotest -g3 -std=c++11 `pkg-config --cflags --libs mono-2` 
* Assertion at mono-threads-posix.c:265, condition `info->handle' not met 

Aborted (core dumped) 
$ 

==================================

// monotest.cpp 
#include <thread>
#include <mono/jit/jit.h>

void Thread() { 
    MonoDomain* domain = mono_jit_init("monotest.dll"); 
    mono_jit_cleanup(domain); 
} 

int main() { 
    //Thread(); 
    std::thread t(Thread); 
    t.join(); 
}

==================================

//////////////////////// 
// monotest.cs 
namespace MyNamespace  { 

    public class MyClass { 
        public MyClass() { } 

        public void MySum(int arg1, int arg2) { 
            System.Console.WriteLine("MySum(" + arg1 + "," + arg2 + ") => " + (arg1 + arg2)); 
        } 
    } 
} 

==================================

################### 
# Makefile 
monotest : monotest.cpp monotest.dll Makefile 
        @g++ --version | head -1 
        g++ $< -o $@ -g3 -std=c++11 `pkg-config --cflags --libs mono-2` 

monotest.dll : monotest.cs 
        @mcs --version 
        mcs $< /out:$@ /target:library 

1 个答案:

答案 0 :(得分:0)

使用单声道线程的文档非常不合适,但通过实验线程可以使用。

一种方法是使用mono_thread_create()。

另一种方法是使用mono_jit_init()打开线程外的域,然后在创建的线程中,在开头调用mono_thead_attach(),在结尾调用mono_thread_detach()。