多執行緒脫離狀態 + 排程
pthread_join 用來等待執行緒結束
不希望等待執行緒結束 就是用脫離狀態(備註:程式結束了執行緒依然會結束)
根據文件 join 和 detached 要設定其中一種 否則多執行緒容易造成記憶體洩漏
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
void *thread_function(void *arg);
char message[] = "Hello World";
int thread_exited = 0;
int main(){
int res;
pthread_t a_thread;
void *thread_result;
pthread_attr_t thread_attr;
//不設定此屬性也可以正常執行
//根據文件 join 和 detached 要設定其中一種 否則多執行緒容易造成記憶體洩漏
pthread_attr_init(&thread_attr);
pthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);
//設定排程屬性
int max_priority;
int min_priority;
struct sched_param scheduling_value;
//排程範圍
max_priority = sched_get_priority_max(SCHED_OTHER);
min_priority = sched_get_priority_min(SCHED_OTHER);
scheduling_value.sched_priority = min_priority;
pthread_attr_setschedparam(&thread_attr,&scheduling_value);
res = pthread_create(&a_thread,&thread_attr,thread_function,(void *)message);
if(res != 0){
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
printf("Waiting for thread to finish...\n");
//res = pthread_join(a_thread,&thread_result);
//printf("Thread joined,it returned %s\n",(char *)thread_result);
while(!thread_exited){
printf("I'm waiting...\n");
sleep(1);
}
printf("Message is now %s\n",message);
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg){
printf("thread_function is running, Argument was %s\n",(char *)arg);
sleep(3);
strcpy(message,"Bye!");
thread_exited = 1;
pthread_exit("Thank you ro the CPU time");
}
相關文章
- Java多執行緒-執行緒狀態Java執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Java併發和多執行緒3:執行緒排程和有條件取消排程Java執行緒
- 多執行緒的執行緒狀態及相關操作執行緒
- Memcached 多執行緒和狀態機執行緒
- 執行緒狀態執行緒
- 多執行緒-執行緒排程及獲取和設定執行緒優先順序執行緒
- 【多執行緒與高併發】- 執行緒基礎與狀態執行緒
- Java執行緒的排程Java執行緒
- 程式執行緒排程方式執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- 執行緒6--執行緒的狀態執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- 多執行緒-執行緒的狀態轉換圖及常見執行情況執行緒
- 程序中的執行緒排程執行緒
- Java執行緒的狀態Java執行緒
- 執行緒狀態和鎖執行緒
- 執行緒各種狀態執行緒
- Spring4+Springmvc+quartz實現多執行緒動態定時排程SpringMVCquartz執行緒
- Java執行緒池中執行緒的狀態簡介Java執行緒
- 深入理解Java多執行緒與併發框(第①篇)——執行緒的狀態Java執行緒
- 【騏程】多執行緒(上)執行緒
- MySQL執行緒狀態詳解MySql執行緒
- Java執行緒狀態轉換Java執行緒
- 執行緒的幾種狀態執行緒
- java--執行緒狀態【轉】Java執行緒
- Mysql複製執行緒狀態MySql執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- boost中asio網路庫多執行緒併發處理實現,以及asio在多執行緒模型中執行緒的排程情況和執行緒安全。執行緒模型
- RxJava 和 RxAndroid 五(執行緒排程)RxJavaAndroid執行緒
- OpenMP 中的執行緒任務排程執行緒
- Spring 非同步執行緒池、排程任務執行緒池配置Spring非同步執行緒
- ThreadPollExcutor執行緒池的狀態thread執行緒
- Java執行緒狀態及切換Java執行緒
- Java 執行緒的5種狀態Java執行緒
- 【Java】執行緒的 6 種狀態Java執行緒
- Java執行緒狀態及同步鎖Java執行緒