【发布时间】:2012-06-07 01:21:43
【问题描述】:
我目前正在开展一个项目,该项目需要我对要处理的网络数据包进行排队。我有一个最多有 25 个线程的 ThreadPool,当它们可用时处理这些数据包。但是,当将数据包数据(封装在一个类中)传递给与 ThreadPool 关联的 thread_proc 方法时,数据会被破坏。我像这样声明我的 ThreadPool 变量:
pool = new ThreadPool<Packet>((Func<Packet>)thread_proc, 25, false);
这是检查可用数据包的线程方法:
void* run()
{
while (true)
{
var packet = packets.poll();
try
{
pool.push(packet);
}
catch (ThreadError e)
{
error(e.message);
}
}
return null;
}
“packets”是以下类的BlockingQueue(使用互斥锁的自定义阻塞队列):
class Packet : Object
{
public unowned ClientHandler client;
public uint8[] data;
public int index;
public int size;
public Packet(ClientHandler client, uint8[] data, int index, int size)
{
this.client = client;
this.data = data;
this.index = index;
this.size = size;
}
}
上述类是包含实际数据包数据(“数据”变量)的内容。当 Packet 实例到达 thread_proc 时,变量值都错误了......
任何关于为什么会发生这种情况的帮助以及可能的解决方案将不胜感激。提前谢谢你。
~迈克尔·K。
【问题讨论】:
-
您是否查看了生成的 C 以确保 Vala 进行了适当的内存管理?您也可以尝试在 valgrind 下运行程序,以确保它没有使用释放的内存。
标签: segmentation-fault bytearray threadpool vala