多线程对象访问
本文关键字:访问 对象 多线程 | 更新日期: 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
.