我目前正在開發一個項目,要求我排列要處理的網絡數據包。我有一個最多有25個線程的ThreadPool,它們在可用時處理這些數據包。但是,將分組數據(封裝在類中)傳遞給與ThreadPool關聯的thread_proc方法時,數據被破壞。我聲明我的線程池變量像這樣:使用ThreadPool的Vala中的數據損壞
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;
}
「包」是一個的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;
}
}
上面的類是什麼包含實際的數據包數據(「數據」var)。當數據包實例到達thread_proc時,變量值全都是錯誤的...
任何幫助,爲什麼會發生這種情況和一個可能的解決方案將不勝感激。先謝謝你。
〜邁克爾K.
你看過生成的C以確保Vala正在進行適當的內存管理嗎?您也可以嘗試在valgrind下運行該程序,以確保它不使用已釋放的回憶。 – apmasell