執行緒結束,缺少pthread_join 的話,資源並不會真正釋放,設定執行緒分離屬性,則可不需要join 都可以釋放資源。
例項:#include
#include
#include
#include
#include
pthread_t pid_new_job;
courseinfo nextcourseinfo;
#define id_size 48+1
struct courseinfo
};void *thread_handlespace(void *args)
int main(void)
res = pthread_attr_setscope(&attr, pthread_scope_system);//
建立執行緒的爭用範圍(pthread_scope_system 或 pthread_scope_process)。 使用 pthread_scope_system 時,此執行緒將與系統中的所有執行緒進行競爭。使用 pthread_scope_process 時,此執行緒將與程序中的其他執行緒進行競爭
res += pthread_attr_setdetachstate(&attr, pthread_create_detached);
if(res != 0)
res = pthread_create(&pid_new_job, null, thread_handlespace, (void *) &nextcourseinfo);//全域性的nextcourseinfo,為了防止銷毀了該變數(此前在這的sleep 可以不用)
//pthread_join(pid_new_job,null);
//無需此句了。
pthread_attr_destroy(&attr);
return0;}
dengwei@dengwei-laptop:/media/dengwei/blog$ free
total used free shared buffers cached
mem: 984680 847920 136760 0 53784 351384
-/+ buffers/cache: 442752 541928
swap: 1354744 0 1354744
dengwei@dengwei-laptop:/media/dengwei/blog$ ./ci &
....
dengwei@dengwei-laptop:/media/dengwei/blog$ free
total used free shared buffers cached
mem: 984680
848536
136144
053800
351436
-/+ buffers/cache: 443300
541380
swap: 1354744
01354744
[1]+ done ./ci
dengwei@dengwei-laptop:/media/dengwei/blog$ free
total used free shared buffers cached
mem: 984680
848612
136068
053808
351468
-/+ buffers/cache: 443336
541344
swap: 1354744
01354744
for more about attribute of thread:
linux 多執行緒的分離和可鏈結屬性
include common.h 這種情況一般用於某個多執行緒呼叫的模組使用前的初始化,但是無法判定哪個執行緒先執行,從而不知道把初始化 放在哪個執行緒合適的問題。當然,我們一般的做法是把初始化函式放在main裡,建立執行緒之前來完成,但是如果我們的程式最終不是做成可執行程式,而是編譯成庫的形式,那...
執行緒的分離狀態
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。執行緒的預設屬性是非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當 pthread join 函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒不是這樣子的,它沒有被其他的執行緒所等待,自己運 行結束了,...
執行緒的分離狀態
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。執行緒的預設屬性,一般是非分離狀態,這種情況下,原有的執行緒等待建立的執行緒結束。只有當pthread join 函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止...