thread_t 数组 linux,首页 C#如何打印pthread_t
好的,這似乎是我的最終答案。 我們有2個實際問題:
如何獲取較短的唯一ID以供線程記錄。
無論如何,我們需要為線程打印真實的pthread_t ID(至少鏈接到POSIX值)。
1.打印POSIX ID(pthread_t)
您可以簡單地將pthread_t視為字節數組,并為每個字節打印十六進制數字。 因此,您不受某些固定大小類型的限制。 唯一的問題是字節順序。 您可能喜歡打印字節的順序與簡單的“ int”打印順序相同。 這是little-endian的示例,并且big-endian僅應還原順序(在define?下):
#include
#include
void print_thread_id(pthread_t id)
{
size_t i;
for (i = sizeof(i); i; --i)
printf("%02x", *(((unsigned char*) &id) + i - 1));
}
int main()
{
pthread_t id = pthread_self();
printf("%08x\n", id);
print_thread_id(id);
return 0;
}
2.獲得較短的可打印線程ID
在任何建議的情況下,您都應將實際線程ID(posix)轉換為某些表的索引。 但是有兩種明顯不同的方法:
2.1。 跟蹤線程。
您可以跟蹤表中所有現有線程的線程ID(應該包裝它們的pthread_create()調用),并具有“重載”的id函數,該函數僅使您獲得表索引,而不是實際的線程ID。 此方案對于任何內部線程相關的調試資源跟蹤也非常有用。 明顯的優勢是線程級跟蹤/調試功能的副作用,并可能在將來進行擴展。 缺點是必須跟蹤任何線程的創建/銷毀。
這是部分偽代碼示例:
pthread_create_wrapper(...)
{
id = pthread_create(...)
add_thread(id);
}
pthread_destruction_wrapper()
{
/* Main problem is it should be called.
pthread_cleanup_*() calls are possible solution. */
remove_thread(pthread_self());
}
unsigned thread_id(pthread_t known_pthread_id)
{
return seatch_thread_index(known_pthread_id);
}
/* user code */
printf("04x", thread_id(pthread_self()));
2.2。 只需注冊新的線程ID。
在記錄期間調用pthread_self()并搜索內部表(如果它知道線程)。如果創建了具有此類ID的線程,則使用其索引(或從以前的線程重復使用,實際上沒關系,因為同一時間沒有2個相同的ID)。 如果線程ID未知,則創建新條目,以便生成/使用新索引。
優點是簡單。 缺點是無法跟蹤線程的創建/銷毀。 因此,要跟蹤此情況,需要一些外部機制。
總結
以上是生活随笔為你收集整理的thread_t 数组 linux,首页 C#如何打印pthread_t的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机控制linux电脑,通过Amora用
- 下一篇: vc c语言 颜色输出字符,关于prin