我正在嘗試使用匯編語言級別的線程進行操作。我想存儲有關當前線程的信息,包括線程ID等信息。我當前的想法是在一個對齊的地址處放置一個指向線程信息結構的指針,例如對於1MB堆棧的(ESP & 0xFFE00000)
。在自定義線程實現中存儲有關當前線程的信息
我看到的直接問題是需要特殊處理,如果我想要堆棧超過1MB,所以我想出了另一個選擇:將所有線程數據結構存儲在鏈表(或數組)中,幷包含線程的開始/結束堆棧範圍作爲結構的一部分。我會保留一個指向列表(或數組)的頭部的指針,該指針位於已知地址處 - 例如與圖像基底的固定偏移量。
這裏有明顯的優點的每個面孔:
- 方法1(對齊地址)到信息
- 更快地訪問和無需
- 但是堆必須全部是同步相同的尺寸並與該邊界對齊
- 方法2(普通sto憤怒)
- 堆棧不必是固定大小和他們沒有對齊,以如此大的邊界
- 但我必須對數據的訪問
- 但同步它不會有不哈希表O(1)訪問時間(或上的螺紋與二進制搜索的數目的固定帽 - 偷偷摸摸),和一個哈希表仍然比直接訪問慢
我應該使用這些方法之一還是有更好的方式來訪問我的線程中的這些信息?
我沒有使用線程包。這是遊戲的一部分。:)現在,它需要知道它的線程ID,但稍後它需要多一些信息。每種方法都有一個靜態已知的最大幀大小(計算評估堆棧),並且每個調用檢查可用的剩餘堆棧,以便它可以崩潰,但不會運行結束。 – 2009-08-12 18:11:49
咦?所以你正在編寫自己的線程包,它獨立於你的操作系統(如果有的話)提供了什麼?在這種情況下,它應該是一個簡單的問題,即獲取當前的SP(或者也許是SS)並確定哪個線程擁有該堆棧。您需要在某個地方維護該信息以安排您的線程。 – kdgregory 2009-08-12 18:55:49
這符合我發佈的第二個想法。我必須存儲的其他內容是線程名稱,文化,異常信息和分配器信息,因爲我想使用像Hoard這樣的多線程分配器(http://www.hoard.org/)。 – 2009-08-13 01:11:32