多线程对象访问

时间:2014-07-22 15:11:08

标签: c# multithreading

我对C#中的多线程有两个问题。

我的程序有脚本,我使用LuaInterface项目加载它们并执行它们。我想在不同的线程上运行脚本,所以我做了以下几点:

new Thread(() =>
{
    using (Lua lua = new Lua())
    {   
        Script script = new Script(character, this.ID);

        lua.RegisterFunction("sendMessage", script, typeof(NpcScript)
            .GetMethod("SendMessage"));

        lua.LoadFile(@"Scripts\" + this.Script + ".lua").Call();
    }
}).Start();

所以这应该在另一个线程上运行脚本。 Script对象也分配给角色对象。 Character类具有以下内容:

public Script Script { get; set; }

脚本的类结构是这样的:

public class Script
{
    public Character Character { get; private set; }
    public int ID { get; private set; }
}

sendMessage方法使用ManualResetEvent返回布尔类型值。主程序线程设置该值,然后sendMessage返回它(sendMessage阻塞当前线程,直到主线程设置响应)。

但是,我面临两个困境。

1。如果主线程将设置Script对象的响应,那不会给我一个例外(因为我从主线程访问它)?

2. 如果脚本线程访问分配给它的字符对象,并且主线程也访问它,会发生什么?不会碰撞吗?

感谢。

1 个答案:

答案 0 :(得分:0)

正如@ByteBlast所说,由于您不使用UI(表单,控件等),因此不存在异常风险。但是,@ sasha_gud说他应该实现同步以避免问题是正确的,因为你有两个线程访问同一个对象。这里最简单的方法是使用Lock