上個月我在知乎問了乙個問題
如何用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還提供了超有用的解決方案,允許使...