多线程对象访问

本文关键字:访问 对象 多线程 | 更新日期: 2023-09-27 18:14:25

关于c#中的多线程,我有两个问题。

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

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对象也被分配给字符对象。字符类有以下内容:

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。如果主线程将设置脚本对象的响应,那不会给我一个异常(因为我从主线程访问它)?

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

谢谢。

多线程对象访问

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