Linux涓璸thread_detach鍑芥暟鎬庝箞浣跨敤
鍦↙inux涓紝pthread_detach鍑芥暟鐢ㄤ簬灏嗕竴涓嚎绋嬪垎绂伙紝浣垮叾鍦ㄧ粓姝㈡椂鑷姩閲婃斁璧勬簮锛屼笉闇€瑕佸叾浠栫嚎绋嬭皟鐢╬thread_join鍑芥暟鏉ヨ幏鍙栫嚎绋嬬殑杩斿洖鍊兼垨鑰呯姸鎬併€?/p>
浣跨敤pthread_detach鍑芥暟鐨勬柟娉曞涓嬶細
- 鍦ㄥ垱寤虹嚎绋嬫椂锛岃缃嚎绋嬬殑灞炴€т负鍒嗙鐘舵€侊紝鍙互浣跨敤pthread_attr_setdetachstate鍑芥暟鏉ヨ缃嚎绋嬪睘鎬э紝灏哾etachstate鍙傛暟璁剧疆涓篜THREAD_CREATE_DETACHED銆?/li>
涓嬮潰鏄竴涓ず渚嬩唬鐮侊細
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void *thread_function(void *arg)
{
// 绾跨▼鐨勫伐浣滃唴瀹?/span>
sleep(3);
printf("Thread function finished.\n");
return NULL;
}
int main()
{
pthread_t thread_id;
pthread_attr_t attr;
// 鍒濆鍖栫嚎绋嬪睘鎬?/span>
pthread_attr_init(&attr);
// 璁剧疆绾跨▼灞炴€т负鍒嗙鐘舵€?/span>
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
// 鍒涘缓绾跨▼
pthread_create(&thread_id, &attr, thread_function, NULL);
// 閿€姣佺嚎绋嬪睘鎬?/span>
pthread_attr_destroy(&attr);
// 涓荤嚎绋嬬殑宸ヤ綔鍐呭
printf("Main thread finished.\n");
return 0;
}
鍦ㄨ繖涓緥瀛愪腑锛屾垜浠鍏堝垵濮嬪寲绾跨▼灞炴€ttr锛岀劧鍚庝娇鐢╬thread_attr_setdetachstate鍑芥暟灏嗙嚎绋嬪睘鎬ц缃负鍒嗙鐘舵€併€傛帴涓嬫潵锛屼娇鐢╬thread_create鍑芥暟鍒涘缓涓€涓柊鐨勭嚎绋嬶紝骞跺皢绾跨▼灞炴€ttr浣滀负鍙傛暟浼犻€掔粰pthread_create銆傛渶鍚庯紝浣跨敤pthread_attr_destroy鍑芥暟閿€姣佺嚎绋嬪睘鎬с€?/p>
- 鍙︿竴绉嶆柟娉曟槸鍦ㄧ嚎绋嬪唴閮ㄤ娇鐢╬thread_detach鍑芥暟灏嗙嚎绋嬪垎绂汇€?/li>
涓嬮潰鏄竴涓ず渚嬩唬鐮侊細
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void *thread_function(void *arg)
{
// 绾跨▼鐨勫伐浣滃唴瀹?/span>
sleep(3);
printf("Thread function finished.\n");
return NULL;
}
int main()
{
pthread_t thread_id;
// 鍒涘缓绾跨▼
pthread_create(&thread_id, NULL, thread_function, NULL);
// 鍒嗙绾跨▼
pthread_detach(thread_id);
// 涓荤嚎绋嬬殑宸ヤ綔鍐呭
printf("Main thread finished.\n");
return 0;
}
鍦ㄨ繖涓緥瀛愪腑锛屾垜浠娇鐢╬thread_create鍑芥暟鍒涘缓涓€涓柊鐨勭嚎绋嬶紝骞跺皢绾跨▼ID瀛樺偍鍦╰hread_id鍙橀噺涓€傜劧鍚庯紝浣跨敤pthread_detach鍑芥暟灏嗚绾跨▼鍒嗙銆?/p>
鏃犺浣跨敤鍝鏂规硶锛屼竴鏃︾嚎绋嬭鍒嗙锛屽畠灏嗗湪缁堟鏃惰嚜鍔ㄩ噴鏀捐祫婧愶紝涓嶅啀闇€瑕佸叾浠栫嚎绋嬭皟鐢╬thread_join鍑芥暟鏉ヨ幏鍙栫嚎绋嬬殑杩斿洖鍊兼垨鐘舵€併€?/p>
相关问答