真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

守護(hù)進(jìn)程創(chuàng)建、linux線程-創(chuàng)新互聯(lián)

?守護(hù)進(jìn)程定義:

周期性的執(zhí)行某項(xiàng)任務(wù)或等待某個(gè)事件發(fā)生的進(jìn)程,他的運(yùn)行不依賴shell終端,他的生存周期較長(zhǎng),從開(kāi)機(jī)開(kāi)始運(yùn)行直到關(guān)機(jī)結(jié)束。

成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開(kāi)源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺(jué)化效果。守護(hù)進(jìn)程的創(chuàng)建步驟:

? 1.創(chuàng)建一個(gè)子進(jìn)程,讓父進(jìn)程退出

? fork

? 2.創(chuàng)建新的會(huì)話期(在子進(jìn)程)?

? setsid();

? 3.改變子進(jìn)程的工作目錄

? chdir("/")

? 4.取消文件權(quán)限掩碼

? umask(0)

? 5.關(guān)閉所有文件描述符

? getdtablesize

? opendir readdir chdir

線程相關(guān)

? 定義:線程是一種輕量級(jí)的進(jìn)程用task_struct來(lái)標(biāo)識(shí)它,它沒(méi)有自己的獨(dú)立內(nèi)存空間,它共 享創(chuàng)建它的進(jìn)程的地址空間。

? 線程創(chuàng)建:

? 使用第三方線程庫(kù)提供的API

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
??? ?作用:創(chuàng)建一個(gè)線程
??? ? *thread:指向線程ID的指針?
??? ?*attr:線程屬性,通常給NULL
??? ?參數(shù)三:指向線程執(zhí)行函數(shù)的函數(shù)指針
??? ?*arg:傳給線程執(zhí)行函數(shù)的入?yún)?br /> ??? ?返回值:0 成功;非0 失敗
?int pthread_join(pthread_t thread, void **retval);
??? ?作用:阻塞等待線程結(jié)束,并回收狀態(tài)值
??? ? thread:線程ID
??? ? **retval:指向線程退出狀態(tài)值的指針
?void pthread_exit(void *retval);
??? ?作用:線程退出函數(shù)
??? ?*retval:線程退出狀態(tài)值
? int pthread_cancel(pthread_t thread);
??? ?作用:取消線程
??? ? thread:線程ID
unubtu=Linux內(nèi)核+各種工具+桌面管理器+各種庫(kù)+各種應(yīng)用程序
多線程的通信 同步 互斥
在一個(gè)進(jìn)程中可以創(chuàng)建多個(gè)線程,那么多個(gè)線程間會(huì)存在數(shù)據(jù)通信問(wèn)題,
?會(huì)存在兩個(gè)線程相互配合完成一件事情,會(huì)存在兩個(gè)線程對(duì)公共資源的競(jìng)態(tài)訪問(wèn)問(wèn)題
?多線程的數(shù)據(jù)通信-->使用全局變量
??? ?./pthead_com1 ?hello
?多線程的同步-->無(wú)名信號(hào)量 ?sem_t sem;
??? ?同步:兩個(gè)線程按照一定的順序相互配合完成一件事情
pthread1-->hello ? 1S ? sem_t ?sema;-->P/V操作函數(shù)控制sema和semb
pthread2-->world ?1s ? sem_t semb;
??? ?P操作:sem_wait(&sema)
??? ??? ?含義:sem_wait會(huì)檢測(cè)信號(hào)量sema的值是否大于0,若大于0,將sema減一
??? ??? ??? ??? ?同時(shí)函數(shù)返回。若等于0,阻塞當(dāng)前線程。
??? ?V操作:sem_post(&sema)--》非阻塞函數(shù)
??? ??? ?含義:sem_post只會(huì)給檢測(cè)的信號(hào)量sema加1 ??? ? ?

多線程的互斥

互斥的引入:多個(gè)線程可能會(huì)使用同一段公共資源,若是同時(shí)訪問(wèn)這段公共資源,就會(huì)造成多個(gè)線程對(duì)公共資源的競(jìng)爭(zhēng),從而造成訪問(wèn)結(jié)果混亂。

如何解決:可以使用互斥鎖。

(1)多個(gè)線程能否使用同一個(gè)線程執(zhí)行函數(shù)

#include#includevoid *ThreadFunc(void *arg)
{
    printf("into thread func---------\r\n");
}
int main()
{
    pthread_t tID1 = -1;
    pthread_t tID2 = -1;
    if(0 != pthread_create(&tID1,NULL,ThreadFunc,NULL))
    {
        return -1;
    }
    if(0 != pthread_create(&tID2,NULL,ThreadFunc,NULL))
    {
        return -1;
    }
    pthread_join(tID1,NULL);
    pthread_join(tID2,NULL);
}

(2)兩個(gè)線程給線程執(zhí)行函數(shù)傳入不同的參數(shù),最后執(zhí)行結(jié)果是否發(fā)生混亂?

#include#include#include#define BUF_SIZE 11

void *ThreadFunc(void *arg)
{
    int i = 0;
    printf("into thread func---------\r\n");
    if(NULL == arg)
    {
        return (void *)NULLL;
    }
    char *pArr = (char *)arg;
    static char buf[BUF_SIZE] = {0};
    for(;i< 10; i++)
    {
        buf[i] = pArr[i];
        usleep(5000);
    }
    printf("buf:%s\r\n",buf);
}
int main()
{
    pthread_t tID1 = -1;
    pthread_t tID2 = -1;
    char arr1[] = "123456789";
    char arr2[] = "abcdefghi";
    if(0 != pthread_create(&tID1,NULL,ThreadFunc,(void *)arr1))
    {
        return -1;
    }
    if(0 != pthread_create(&tID2,NULL,ThreadFunc,(void *)arr2))
    {
        return -1;
    }
    pthread_join(tID1,NULL);
    pthread_join(tID2,NULL);
}

(3)使用互斥鎖解決兩線程互斥訪問(wèn)公共資源

pthread_mutex_t mutex;//線程互斥鎖

pthread_mutex_init(&mutex,NULL)

pthread_mutex_lock(mutex);

pthread_mutex_unlock(mutex);

#include#include#include#define BUF_SIZE 11
pthread_mutex_t mutex;

void *ThreadFunc(void *arg)
{
    int i = 0;
    printf("into thread func---------\r\n");
    if(NULL == arg)
    {
        return (void *)NULLL;
    }
    pthread_mutex_lock(&mutex);
    char *pArr = (char *)arg;
    static char buf[BUF_SIZE] = {0};
    for(;i< 10; i++)
    {
        buf[i] = pArr[i];
        usleep(5000);
    }
    printf("buf:%s\r\n",buf);
    pthread_mutex_unlock(&mutex);
}
int main()
{
    pthread_t tID1 = -1;
    pthread_t tID2 = -1;
    char arr1[] = "123456789";
    char arr2[] = "abcdefghi";
    if(-1 == pthread_mutex_init(&mutex,NULL))
    {
        return -1;
    }
    if(0 != pthread_create(&tID1,NULL,ThreadFunc,(void *)arr1))
    {
        return -1;
    }
    if(0 != pthread_create(&tID2,NULL,ThreadFunc,(void *)arr2))
    {
        return -1;
    }
    pthread_join(tID1,NULL);
    pthread_join(tID2,NULL);
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


本文名稱:守護(hù)進(jìn)程創(chuàng)建、linux線程-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/gcddp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部