UNIX環境高級編程學習之第十一章線程-線程的創建、退出、等待、取消、分離
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> void* thread_fun(void* arg) // 線程執行函數1 { printf("fun:hello world!/n"); return (void*)1; } void* thread_fun2(void* arg) // 線程執行函數2 { printf("fun 2:tid = %ul/n", pthread_self()); // pthread_self() 調用當前線程ID pthread_exit((void*) 2); // 線程退出 } void* thread_fun3(void* arg) // 線程執行函數3 { while (1) { printf("fun 3:tid = %ul/n", pthread_self()); sleep(5); } return (void*)3; } int main(int argc, char* argv[]) { const int n = 3; int i, ret; void* tret; pthread_t tid[n]; ret = pthread_create(&tid[0], NULL, thread_fun, NULL); // 線程創建 if (ret != 0) { printf("pthread_create 0 Error/n"); } ret = pthread_create(&tid[1], NULL, thread_fun2, NULL); // 線程創建 if (ret != 0) { printf("pthread_create 1 Error/n"); } ret = pthread_create(&tid[2], NULL, thread_fun3, NULL); // 線程創建 if (ret != 0) { printf("pthread_create 2 Error/n"); } ret = pthread_detach(tid[2]);// 線程分離, 線程分離後,底層資源立即回收,再用pthread_join取狀態會報錯。 if (ret != 0) { printf("pthread_cancel Error/n"); } ret = pthread_cancel(tid[2]);// 線程取消 if (ret != 0) { printf("pthread_cancel Error/n"); } for (i = 0;i < n;i++) { ret = pthread_join(tid[i], &tret); // 取線程退出狀態 if (ret != 0) { printf("%d. pthread id:%ul, pthread_join Error!/n", i, tid[i]); }else{ printf("%d. pthread id:%ul, pthread_fun return value:%d /n", i, tid[i], (int)tret); } } sleep(15); return 0; }
作者:無哲 引言 在構建現代數據和業務系統的過程中,可觀測性已經變得至關重要,日誌服務(SLS)爲 Log/Trace/Metric 數據提供了大規模、低成本、高性能的一站式平臺服務,並提供數據採集、加工、投遞、分析、告警、可視化等功能,從
本文描述了界面組件庫DevExpress的Office File API(WinForms & WPF)和受Office啓發的控件在v24.1中發佈的一些功能,並詳細介紹了我們當前的搶先體驗預覽版本v24.1中的內容。 DevExpress
Linux編輯器之神~vim編輯器 簡介 vi 編輯器是所有 Unix 及 Linux 系統下標準的編輯器,類似於 windows 系統下的 notepad(記事本)編輯器,由於在 Unix 及 Linux 系統的任何版本,vi編輯器
繼承 Thread 類 Thread 類本質上是實現了 Runnable 接口的一個實例,代表一個線程的實例。 啓動線程的唯一方法就是通過 Thread 類的 start()實例方法。 start()方法是一個 native 方法,它將
前端面試題 - null是原始類型,但爲什麼typeof null的結果是object? 造成這個結果的原因是null的內存地址是以000開頭,而js會將000開頭的內存地址視爲object。 通過isNull()來判斷一個值是不是null
DHTMLX Suite UI 組件庫允許您更快地構建跨平臺、跨瀏覽器 Web 和移動應用程序。它包括一組豐富的即用式 HTML5 組件,這些組件可以輕鬆組合到單個應用程序界面中。 DHTMLX Gantt是用於跨瀏覽器和跨平臺應用程序的功
本文分享自華爲雲社區《GaussDB(DWS)向量化執行引擎詳解》,作者: yd_212508532。 前言 適用版本:【基線功能】 傳統的行執行引擎大多采用一次一元組的執行模式,這樣在執行過程中CPU大部分時間並沒有用來處理數據,更
SpringBoot如何優雅的進行參數校驗 一.爲什麼要進行參數校驗 在日常的開發過程中,我們常常需要對傳入的參數進行校驗,比如在web前後端分離項目中,參數校驗有兩個方面: 前端進行參數校驗 後端進行參數校驗 那這兩種
結構特點 List 和 Set 是存儲單列數據的集合,Map 是存儲鍵和值這樣的雙列數據的集合;List 中存儲的數據是有順序,並且允許重複;Map 中存儲的數據是沒有順序的,其鍵是不能重複的,它的值是可以有重複的,Set 中存儲的數據
本文分享自華爲雲社區《Spring高手之路17——動態代理的藝術與實踐》,作者: 磚業洋__。 1. 背景 動態代理是一種強大的設計模式,它允許開發者在運行時創建代理對象,用於攔截對真實對象的方法調用。這種技術在實現面向切面編程(AOP)
在 Vue3 中,可以使用 reactive 函數創建響應式對象。這些響應式對象可以跟蹤其屬性的變化並且自動地更新視圖。但是在某些情況下,我們可能需要清空這些響應式對象。下面是一些方法來清空 Vue3 reactive。 方法一:使用 Ob
通過一個案例瞭解 not in 對 NULL 值敏感的處理邏輯和優化方法。 作者:胡呈清,愛可生 DBA 團隊成員,擅長故障分析、性能優化,個人博客:[簡書 | 輕鬆的魚],歡迎討論。 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉
前言: MySQL的性能是大家在使用時十分關心的問題,比如在高併發訪問時,並且有慢sql存在的情況下,MySQL的性能會明顯下降,這會導致數據庫響應時間變慢,甚至導致數據庫宕機。那麼爲了避免Mysql性能問題,比較常用的方式創建適當的索引
「鏈表 linked list」是一種線性數據結構,其中的每個元素都是一個節點對象,各個節點通過“引用”相連接。 引用記錄了下一個節點的內存地址,通過它可以從當前節點訪問到下一個節點。 鏈表的設計使得各個節點可以分散存儲在內存各處,它們的內
昨天,Andres Freund 通過電子郵件告知 oss-security@ 社區,他在 xz/liblzma 中發現了一個隱藏得非常巧妙的後門,這個後門甚至影響到了 OpenSSH 服務器的安全。Andres 能夠發現並深入調查這個問題