Linux 线程属性的使用
線程屬性
?線程具有屬性,用pthread_attr_t表示,在對該結構進行處理之前必須進行初始化,在使用后需要對其去除初始化。我們用pthread_attr_init函數對其初始化,用pthread_attr_destroy對其去除初始化。
.
| 名稱:: | pthread_attr_init/pthread_attr_destroy |
| 功能: | 對線程屬性初始化/去除初始化 |
| 頭文件: | #include <pthread.h> |
| 函數原形: | int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); |
| 參數: | Attr???線程屬性變量 |
| 返回值: | 若成功返回0,若失敗返回-1。 |
??????
?
?
?
?
?
?
?
?
調用pthread_attr_init之后,pthread_t結構所包含的內容就是操作系統實現支持的線程所有屬性的默認值。
???????如果要去除對pthread_attr_t結構的初始化,可以調用pthread_attr_destroy函數。如果pthread_attr_init實現時為屬性對象分配了動態內存空間,pthread_attr_destroy還會用無效的值初始化屬性對象,因此如果經pthread_attr_destroy去除初始化之后的pthread_attr_t結構被pthread_create函數調用,將會導致其返回錯誤。
線程的分離狀態
線程的分離狀態決定一個線程以什么樣的方式來終止自己。在默認情況下線程是非分離狀態的,這種情況下,原有的線程等待創建的線程結束。只有當pthread_join()函數返回時,創建的線程才算終止,才能釋放自己占用的系統資源。
而分離線程不是這樣子的,它沒有被其他的線程所等待,自己運行結束了,線程也就終止了,馬上釋放系統資源。程序員應該根據自己的需要,選擇適當的分離狀態。所以如果我們在創建線程時就知道不需要了解線程的終止狀態,則可以pthread_attr_t結構中的detachstate線程屬性,讓線程以分離狀態啟動。
| 名稱:: | pthread_attr_getdetachstate/pthread_attr_setdetachstate |
| 功能: | 獲取/修改線程的分離狀態屬性 |
| 頭文件: | #include <pthread.h> |
| 函數原形: | int pthread_attr_getdetachstate(const pthread_attr_t * attr,int *detachstate); int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate); |
| 參數: | Attr???線程屬性變量 Detachstate??線程的分離狀態屬性 |
| 返回值: | 若成功返回0,若失敗返回-1。 |
?
?
?
?
?
?
?
?
?
?
?
?
可以使用pthread_attr_setdetachstate函數把線程屬性detachstate設置為下面的兩個合法值之一:設置為PTHREAD_CREATE_DETACHED,以分離狀態啟動線程;或者設置為PTHREAD_CREATE_JOINABLE,正常啟動線程。可以使用pthread_attr_getdetachstate函數獲取當前的datachstate線程屬性。
#include <pthread.h>
#include <iostream>#include <semaphore.h>
#define SIZE 1024
void* child_thread(void* arg)
{
? ? printf("child thread\n");
}
int main(int argc, char* argv[])
{
? ? int res;
? ? pthread_t tid;
? ? pthread_attr_t attr;
? ? pthread_attr_init(&attr);
? ? pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
? ? res = pthread_create(&tid, &attr, child_thread, NULL);
? ? pthread_attr_destroy(&attr);
? ? sleep(1);
? ? return(EXIT_SUCCESS);
}
| 名稱:: | pthread_attr_getdetachstate/pthread_attr_setdetachstate |
| 功能: | 獲取/修改線程的分離狀態屬性 |
| 頭文件: | #include <pthread.h> |
| 函數原形: | int pthread_attr_getdetachstate(const pthread_attr_t * attr,int *detachstate); int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate); |
| 參數: | Attr???線程屬性變量 Detachstate??線程的分離狀態屬性 |
| 返回值: | 若成功返回0,若失敗返回-1。 |
?
?
?
?
?
?
?
?
?
?
?
?
可以使用pthread_attr_setdetachstate函數把線程屬性detachstate設置為下面的兩個合法值之一:設置為PTHREAD_CREATE_DETACHED,以分離狀態啟動線程;或者設置為PTHREAD_CREATE_JOINABLE,正常啟動線程。可以使用pthread_attr_getdetachstate函數獲取當前的datachstate線程屬性。
總結
以上是生活随笔為你收集整理的Linux 线程属性的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 线程与互斥锁的使用
- 下一篇: 【转】杀人后一个孩子的做法…不看你会后悔