Linux 线程属性的使用
線(xiàn)程屬性
?線(xiàn)程具有屬性,用pthread_attr_t表示,在對(duì)該結(jié)構(gòu)進(jìn)行處理之前必須進(jìn)行初始化,在使用后需要對(duì)其去除初始化。我們用pthread_attr_init函數(shù)對(duì)其初始化,用pthread_attr_destroy對(duì)其去除初始化。
.
| 名稱(chēng):: | pthread_attr_init/pthread_attr_destroy |
| 功能: | 對(duì)線(xiàn)程屬性初始化/去除初始化 |
| 頭文件: | #include <pthread.h> |
| 函數(shù)原形: | int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *attr); |
| 參數(shù): | Attr???線(xiàn)程屬性變量 |
| 返回值: | 若成功返回0,若失敗返回-1。 |
??????
?
?
?
?
?
?
?
?
調(diào)用pthread_attr_init之后,pthread_t結(jié)構(gòu)所包含的內(nèi)容就是操作系統(tǒng)實(shí)現(xiàn)支持的線(xiàn)程所有屬性的默認(rèn)值。
???????如果要去除對(duì)pthread_attr_t結(jié)構(gòu)的初始化,可以調(diào)用pthread_attr_destroy函數(shù)。如果pthread_attr_init實(shí)現(xiàn)時(shí)為屬性對(duì)象分配了動(dòng)態(tài)內(nèi)存空間,pthread_attr_destroy還會(huì)用無(wú)效的值初始化屬性對(duì)象,因此如果經(jīng)pthread_attr_destroy去除初始化之后的pthread_attr_t結(jié)構(gòu)被pthread_create函數(shù)調(diào)用,將會(huì)導(dǎo)致其返回錯(cuò)誤。
線(xiàn)程的分離狀態(tài)
線(xiàn)程的分離狀態(tài)決定一個(gè)線(xiàn)程以什么樣的方式來(lái)終止自己。在默認(rèn)情況下線(xiàn)程是非分離狀態(tài)的,這種情況下,原有的線(xiàn)程等待創(chuàng)建的線(xiàn)程結(jié)束。只有當(dāng)pthread_join()函數(shù)返回時(shí),創(chuàng)建的線(xiàn)程才算終止,才能釋放自己占用的系統(tǒng)資源。
而分離線(xiàn)程不是這樣子的,它沒(méi)有被其他的線(xiàn)程所等待,自己運(yùn)行結(jié)束了,線(xiàn)程也就終止了,馬上釋放系統(tǒng)資源。程序員應(yīng)該根據(jù)自己的需要,選擇適當(dāng)?shù)姆蛛x狀態(tài)。所以如果我們?cè)趧?chuàng)建線(xiàn)程時(shí)就知道不需要了解線(xiàn)程的終止?fàn)顟B(tài),則可以pthread_attr_t結(jié)構(gòu)中的detachstate線(xiàn)程屬性,讓線(xiàn)程以分離狀態(tài)啟動(dòng)。
| 名稱(chēng):: | pthread_attr_getdetachstate/pthread_attr_setdetachstate |
| 功能: | 獲取/修改線(xiàn)程的分離狀態(tài)屬性 |
| 頭文件: | #include <pthread.h> |
| 函數(shù)原形: | int pthread_attr_getdetachstate(const pthread_attr_t * attr,int *detachstate); int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate); |
| 參數(shù): | Attr???線(xiàn)程屬性變量 Detachstate??線(xiàn)程的分離狀態(tài)屬性 |
| 返回值: | 若成功返回0,若失敗返回-1。 |
?
?
?
?
?
?
?
?
?
?
?
?
可以使用pthread_attr_setdetachstate函數(shù)把線(xiàn)程屬性detachstate設(shè)置為下面的兩個(gè)合法值之一:設(shè)置為PTHREAD_CREATE_DETACHED,以分離狀態(tài)啟動(dòng)線(xiàn)程;或者設(shè)置為PTHREAD_CREATE_JOINABLE,正常啟動(dòng)線(xiàn)程。可以使用pthread_attr_getdetachstate函數(shù)獲取當(dāng)前的datachstate線(xiàn)程屬性。
#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);
}
| 名稱(chēng):: | pthread_attr_getdetachstate/pthread_attr_setdetachstate |
| 功能: | 獲取/修改線(xiàn)程的分離狀態(tài)屬性 |
| 頭文件: | #include <pthread.h> |
| 函數(shù)原形: | int pthread_attr_getdetachstate(const pthread_attr_t * attr,int *detachstate); int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate); |
| 參數(shù): | Attr???線(xiàn)程屬性變量 Detachstate??線(xiàn)程的分離狀態(tài)屬性 |
| 返回值: | 若成功返回0,若失敗返回-1。 |
?
?
?
?
?
?
?
?
?
?
?
?
可以使用pthread_attr_setdetachstate函數(shù)把線(xiàn)程屬性detachstate設(shè)置為下面的兩個(gè)合法值之一:設(shè)置為PTHREAD_CREATE_DETACHED,以分離狀態(tài)啟動(dòng)線(xiàn)程;或者設(shè)置為PTHREAD_CREATE_JOINABLE,正常啟動(dòng)線(xiàn)程。可以使用pthread_attr_getdetachstate函數(shù)獲取當(dāng)前的datachstate線(xiàn)程屬性。
總結(jié)
以上是生活随笔為你收集整理的Linux 线程属性的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux 线程与互斥锁的使用
- 下一篇: Linux 7 pycurl.so: u