如何在Linux實現自定義的errno

2021-07-29 16:45:06 字數 2398 閱讀 8732

上個月我在知乎問了乙個問題

如何用c實現乙個簡單的執行緒安全的errno?

然而因為專案的問題,最後不了了之了

再次回過頭研究了這個問題,我還是對多執行緒了解的太少了。

原來在posix pthread中還有pthread_once,pthread_create_key這樣神奇的函式

實現:

static pthread_key_t sdk_errno_map;

static pthread_once_t sdk_errno_once = pthread_once_init;

const

char *sdk_errlist = ;

void sdk_init_errno()

void sdk_set_errno(int error_number)

*errno = error_number;

}const

char *sdk_parse_reason()

通過pthread_once初始化乙個pthread_key_t,然後pthread_key_t中為每個執行緒儲存乙個int表示error_num,由此儲存了每個執行緒的錯誤資訊。

以下是測試**:

void * thread_func(void *args)

return null;

}int main()

以下是輸出結果:

thread 5 :parse error reason----> error_5

thread 4 :parse error reason----> error_4

thread 3 :parse error reason----> error_3

thread 2 :parse error reason----> error_2

thread 1 :parse error reason----> error_1

thread 5 :parse error reason----> error_5

thread 4 :parse error reason----> error_4

thread 3 :parse error reason----> error_3

thread 2 :parse error reason----> error_2

thread 1 :parse error reason----> error_1

thread 4 :parse error reason----> error_4

thread 5 :parse error reason----> error_5

thread 3 :parse error reason----> error_3

thread 2 :parse error reason----> error_2

thread 1 :parse error reason----> error_1

thread 5 :parse error reason----> error_5

thread 4 :parse error reason----> error_4

thread 3 :parse error reason----> error_3

thread 2 :parse error reason----> error_2

thread 1 :parse error reason----> error_1

thread 4 :parse error reason----> error_4

thread 3 :parse error reason----> error_3

thread 5 :parse error reason----> error_5

thread 2 :parse error reason----> error_2

thread 1 :parse error reason----> error_1

從測試結果來看,滿足了我的需求,哈哈哈。

我以為這已經夠簡單了,沒想到還有更簡單的,c語言也有thread_local關鍵字,為__thread,一口老血噴了出來。

errno多執行緒安全 - jimshi -

pthread_key_t和pthread_key_create()詳解 - 幸福國度 - 部落格頻道 - csdn.net

每天進步一點點–linux中的執行緒區域性儲存(一) - cynric 的部落格 - 部落格頻道 - csdn.net

每天進步一點點–linux中的執行緒區域性儲存(二) - cynric 的部落格 - 部落格頻道 - csdn.net

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

linux自定義命令的實現

我們在工作中,有時候會遇到經常使用但是特別長的命令,此時就用到了自定義命令簡化,比如你想查詢當前目錄下檔案內容包含 while 的c語言原始檔 jiang jiang virtual machine find name c xargs grep n while 直接在家目錄下輸入vi bahsrc ...

如何在Photoshop中自定義鍵盤快捷鍵

我們每個人都在 adobe photoshop中 使用不同的工具,通過點選下拉列表,來選擇相應的工具,但是這可能是有點浪費時間的。其實通過點選選單中 的各種工具和行動 我們可以 建立鍵盤快捷方式 通過簡單的按鍵,就可以節省寶貴的時間。adobe公司的photoshop還提供了超有用的解決方案,允許使...