亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C > 正文

Linux線程管理必備:解析互斥量與條件變量的詳解

2020-01-26 16:07:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

   做過(guò)稍微大一點(diǎn)項(xiàng)目的人都知道,力求程序的穩(wěn)定性和調(diào)度的方便,使用了大量的線程,幾乎每個(gè)模塊都有一個(gè)專(zhuān)門(mén)的線程處理函數(shù)。而互斥量與條件變量在線程管理中必不可少,任務(wù)間的調(diào)度幾乎都是由互斥量與條件變量控制。互斥量的實(shí)現(xiàn)與進(jìn)程中的信號(hào)量(無(wú)名信號(hào)量)是類(lèi)似的,當(dāng)然,信號(hào)量也可以用于線程,區(qū)別在于初始化的時(shí)候,其本質(zhì)都是P/V操作。編譯時(shí),記得加上-lpthread或-lrt哦。

   有關(guān)進(jìn)程間通信(消息隊(duì)列)見(jiàn):進(jìn)程間通信之深入消息隊(duì)列的詳解

一、互斥量

1. 初始化與銷(xiāo)毀:

   對(duì)于靜態(tài)分配的互斥量, 可以初始化為PTHREAD_MUTEX_INITIALIZER等價(jià)于pthread_mutex_init(…, NULL))調(diào)用pthread_mutex_init。

   對(duì)于動(dòng)態(tài)分配的互斥量, 在申請(qǐng)內(nèi)存(malloc)之后,通過(guò)pthread_mutex_init進(jìn)行初始化, 并且在釋放內(nèi)存(free)前需要調(diào)用pthread_mutex_destroy.

    int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t*restric attr);

    int pthread_mutex_destroy(pthread_mutex_t *mutex);

返回值:成功則返回0,出錯(cuò)則返回錯(cuò)誤編號(hào).

說(shuō)明:1、如果使用默認(rèn)的屬性初始化互斥量,只需把a(bǔ)ttr設(shè)為NULL

           2、銷(xiāo)毀一個(gè)互斥鎖即意味著釋放它所占用的資源,且要求鎖當(dāng)前處于開(kāi)放狀態(tài)。由于在Linux中,互斥鎖并不占用任何資源,因此 LinuxThreads中的pthread_mutex_destroy()除了檢查鎖狀態(tài)以外(鎖定狀態(tài)則返回EBUSY)沒(méi)有其他動(dòng)作。

2. 互斥操作:

   對(duì)共享資源的訪問(wèn), 要對(duì)互斥量進(jìn)行加鎖,如果互斥量已經(jīng)上了鎖, 調(diào)用線程會(huì)阻塞,直到互斥量被解鎖。在完成了對(duì)共享資源的訪問(wèn)后, 要對(duì)互斥量進(jìn)行解鎖。

    int pthread_mutex_lock(pthread_mutex_t *mutex);  //P操作:請(qǐng)求資源(+1)

    int pthread_mutex_trylock(pthread_mutex_t *mutex);

    int pthread_mutex_unlock(pthread_mutex_t *mutex);//V操作:釋放資源(-1)

返回值:成功則返回0,出錯(cuò)則返回錯(cuò)誤編號(hào).

說(shuō)明:1、想給一個(gè)互斥量上鎖,我們調(diào)用pthread_mutex_lock。如果mutex已經(jīng)上鎖,調(diào)用的線程將會(huì)被阻塞,直至信號(hào)量解鎖。

       2、具體說(shuō)一下trylock函數(shù), 這個(gè)函數(shù)是非阻塞調(diào)用模式,也就是說(shuō), 如果互斥量沒(méi)被鎖住,trylock函數(shù)將把互斥量加鎖, 并獲得對(duì)共享資源的訪問(wèn)權(quán)限;如果互斥量被鎖住了,trylock函數(shù)將不會(huì)阻塞等待而直接返回EBUSY, 表示共享資源處于忙狀態(tài)。

       3、要解鎖一個(gè)信號(hào)量,我們調(diào)用phtread_mutex_unlock。

3. 死鎖、同步、與互斥的關(guān)系

3.1 死鎖:

   有時(shí),可能需要同時(shí)訪問(wèn)兩個(gè)資源。您可能正在使用其中的一個(gè)資源,隨后發(fā)現(xiàn)還需要另一個(gè)資源。如果兩個(gè)線程嘗試聲明這兩個(gè)資源,但是以不同的順序鎖定與這些資源相關(guān)聯(lián)的互斥鎖,則會(huì)出現(xiàn)問(wèn)題。例如,如果兩個(gè)線程分別鎖定互斥鎖1 和互斥鎖 2,則每個(gè)線程嘗試鎖定另一個(gè)互斥鎖時(shí),將會(huì)出現(xiàn)死鎖。下面的例子說(shuō)明了可能的死鎖情況。

線程 1

線程 2

pthread_mutex_lock(&m1);

pthread_mutex_lock(&m2);

do something……

pthread_mutex_unlock(&m2);

pthread_mutex_unlock(&m1);

pthread_mutex_lock(&m2);

pthread_mutex_lock(&m1);

do something……

pthread_mutex_unlock(&m1);

pthread_mutex_unlock(&m2);


3.2 同步:  

線程 1

線程 2

pthread_mutex_lock(&m1);

do something……

pthread_mutex_unlock(&m2);

pthread_mutex_lock(&m2);

do something……

pthread_mutex_unlock(&m1);


3.3 互斥: 

線程 1

pthread_mutex_lock(&m1);

do something……//臨界區(qū)(Critical Section)

pthread_mutex_unlock(&m1);


4. 互斥量之前輩總結(jié)

       1.對(duì)共享資源操作前一定要獲得鎖。

       2.完成操作以后一定要釋放鎖。

       3.盡量短時(shí)間地占用鎖。

       4.如果有多鎖, 如獲得順序是ABC連環(huán)扣,釋放順序也應(yīng)該是ABC。

       5.線程錯(cuò)誤返回時(shí)應(yīng)該釋放它所獲得的鎖。

二、條件變量

1. 創(chuàng)建和注銷(xiāo)

    條件變量和互斥鎖一樣,都有靜態(tài)動(dòng)態(tài)兩種創(chuàng)建方式

a. 靜態(tài)方式

    靜態(tài)方式使用PTHREAD_COND_INITIALIZER常量,如: pthread_cond_t  cond = PTHREAD_COND_INITIALIZER

b. 動(dòng)態(tài)方式
   int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)

    使用 cond_attr 指定的屬性初始化條件變量 cond,當(dāng) cond_attr NULL時(shí),使用缺省的屬性。LinuxThreads實(shí)現(xiàn)條件變量不支持屬性,因此 cond_attr參數(shù)實(shí)際被忽略。
c. 
注銷(xiāo)

    int pthread_cond_destroy(pthread_cond_t *cond)

    注銷(xiāo)一個(gè)條件變量需要調(diào)用pthread_cond_destroy(),只有在沒(méi)有線程在該條件變量上等待的時(shí)候才能注銷(xiāo)這個(gè)條件變量,否則返回EBUSY。因?yàn)?/SPAN>Linux實(shí)現(xiàn)的條件變量沒(méi)有分配什么資源,所以注銷(xiāo)動(dòng)作只包括檢查是否有等待線程。

2. 等待和激發(fā)

2.1 等待

   int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
   這個(gè)函數(shù)POSIX線程信號(hào)發(fā)送系統(tǒng)的核心,也是最難以理解的部分,過(guò)程為:解鎖-wait-收到信號(hào)-加鎖-返回。

2.2 設(shè)置時(shí)間的等待

   int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, conststruct timespec *abstime)

    pthread_cond_timedwait pthread_cond_wait一樣,自動(dòng)解鎖互斥量及等待條件變量,但它還限定了等待時(shí)間。如果在 abstime指定的時(shí)間內(nèi) cond未觸發(fā),互斥量 mutex被重新加鎖,并返回錯(cuò)誤 ETIMEDOUT。abstime參數(shù)指定一個(gè)絕對(duì)時(shí)間,時(shí)間原點(diǎn)與 time gettimeofday相同:abstime = 0表示 1970 年 1 1 00:00:00 GMT。 

2.3 激發(fā)

    int pthread_cond_signal(pthread_cond_t *cond);
    int pthread_cond_broadcast(pthread_cond_t *cond);

    激發(fā)條件有兩種形式,pthread_cond_signal()激活一個(gè)等待該條件的線程,多個(gè)線程阻塞在此條件變量上時(shí),哪一個(gè)線程被喚醒是由線程的調(diào)度策略所決定的;而pthread_cond_broadcast()激活所有等待線程,這些線程被喚醒后將再次競(jìng)爭(zhēng)相應(yīng)的互斥鎖

   要注意的是,必須用保護(hù)條件變量的互斥鎖來(lái)保護(hù)激活函數(shù),否則條件滿足信號(hào)有可能在測(cè)試條件和調(diào)用pthread_cond_wait()函數(shù)之間被發(fā)出,從而造成無(wú)限制的等待。 

三、互斥量與條件變量

    互斥量存在的問(wèn)題:從本質(zhì)上說(shuō)互斥量就是一把鎖,互斥量串行執(zhí)行,能確保每次只有一個(gè)線程訪問(wèn)。互斥量是線程程序必需的工具,但它們并非萬(wàn)能的。例如,如果線程正在輪詢等待共享數(shù)據(jù)內(nèi)某個(gè)條件出現(xiàn),那會(huì)發(fā)生什么呢?它可以重復(fù)對(duì)互斥對(duì)象鎖定和解鎖,每次都會(huì)檢查共享數(shù)據(jù)結(jié)構(gòu),以查找某個(gè)值。但這是在浪費(fèi)時(shí)間和資源,而且這種繁忙查詢的效率非常低。同樣,在每次檢查之間讓線程短暫地進(jìn)入睡眠,比如睡眠3s,但是因此線程代碼就無(wú)法最快作出響應(yīng)。

    問(wèn)題的解決: 條件變量通過(guò)允許線程阻塞和等待另一個(gè)線程發(fā)送信號(hào)的方法彌補(bǔ)了互斥鎖的不足,條件變量常和互斥鎖一起使用。使用時(shí),條件變量被用來(lái)阻塞一個(gè)線程,當(dāng)條件不滿足時(shí),線程往往解開(kāi)相應(yīng)的互斥鎖并等待條件發(fā)生變化。一旦其它的某個(gè)線程改變了條件變量,它將通知相應(yīng)的條件變量喚醒一個(gè)或多個(gè)正被此條件變量阻塞的線程。這些線程將重新鎖定互斥鎖并重新測(cè)試條件是否滿足。

四、線程管理相關(guān)代碼

復(fù)制代碼 代碼如下:

//省略了線程互斥量以及條件變量的初始化
//線程管理:阻塞sec秒讀取線程信息
//三個(gè)參數(shù)分別為:線程信息、線程ID、超時(shí)秒數(shù)
bool ManagePthread_TimeReadSignal(PTHREAD_BUF *rbuf, PTHREAD_ID thread_num, int sec)
{
    bool b_valid = false;
    struct timespec to;
    int err;
    to.tv_sec = time(NULL) + sec;
    to.tv_nsec = 0;

 //上鎖
    pthread_mutex_lock(&managePthread.g_pthread_mutex[thread_num]);
 //超時(shí)sec秒阻塞等待,類(lèi)似select
    err = pthread_cond_timedwait(&managePthread.g_pthread_cond[thread_num], &managePthread.g_pthread_mutex[thread_num], &to);
    if(err == ETIMEDOUT)
    {
        pthread_mutex_unlock(&managePthread.g_pthread_mutex[thread_num]);
        return false;
    }

 //獲取線程信息
    if(managePthread.g_pthread_info[thread_num] == WRITE_FLAG)
    {
        managePthread.g_pthread_info[thread_num] = READ_FLAG;
        memcpy((PTHREAD_BUF *)rbuf, (PTHREAD_BUF *)&managePthread.g_pthread_buf[thread_num], sizeof(PTHREAD_BUF));
        b_valid = true;
    }

 //解鎖
    pthread_mutex_unlock(&managePthread.g_pthread_mutex[thread_num]);
    return b_valid;
}
//阻塞讀取線程信息
bool ManagePthread_ReadSignal(PTHREAD_BUF *rbuf, PTHREAD_ID thread_num, bool wait)
{
    bool b_valid = false;
    pthread_mutex_lock(&managePthread.g_pthread_mutex[thread_num]);
    if(wait == true)
        pthread_cond_wait(&managePthread.g_pthread_cond[thread_num], &managePthread.g_pthread_mutex[thread_num]);
    if(managePthread.g_pthread_info[thread_num] == WRITE_FLAG)
    {
        managePthread.g_pthread_info[thread_num] = READ_FLAG;
        memcpy((PTHREAD_BUF *)rbuf, (PTHREAD_BUF *)&managePthread.g_pthread_buf[thread_num], sizeof(PTHREAD_BUF));
        b_valid = true;
    }
    pthread_mutex_unlock(&managePthread.g_pthread_mutex[thread_num]);
    return b_valid;
}
//激活/發(fā)送線程信息
bool ManagePthread_SendSignal(PTHREAD_BUF *sbuf, PTHREAD_ID thread_num)
{
    bool b_valid = false;
    pthread_mutex_lock(&managePthread.g_pthread_mutex[thread_num]);
    managePthread.g_pthread_info[thread_num] = WRITE_FLAG;
    if(sbuf)
    {
        memcpy((PTHREAD_BUF *)&managePthread.g_pthread_buf[thread_num], (PTHREAD_BUF *)sbuf, sizeof(PTHREAD_BUF));
    }
    pthread_mutex_unlock(&managePthread.g_pthread_mutex[thread_num]);
    pthread_cond_signal(&managePthread.g_pthread_cond[thread_num]);
    b_valid = true;
    return b_valid;
}
//廣播
bool ManagePthread_BroadcastSignal(PTHREAD_BUF *sbuf, PTHREAD_ID thread_num)
{
    bool b_valid = false;
    pthread_mutex_lock(&managePthread.g_pthread_mutex[thread_num]);
    managePthread.g_pthread_info[thread_num] = WRITE_FLAG;
    memcpy((PTHREAD_BUF *)&managePthread.g_pthread_buf[thread_num], (PTHREAD_BUF *)sbuf, sizeof(PTHREAD_BUF));
    pthread_mutex_unlock(&managePthread.g_pthread_mutex[thread_num]);
    pthread_cond_broadcast(&managePthread.g_pthread_cond[thread_num]);
    b_valid = true;
    return b_valid;
}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

九九热久久66| 蜜臀av中文字幕| 国产精品传媒视频| 欧美精品18videosex性欧美| 精品国产一区二区三区四区阿崩| 日本免费黄视频| 中文国产成人精品| 97香蕉超级碰碰久久免费的优势| 精品亚洲免费视频| 99国产精品久久久久久久成人| 男插女免费视频| 日韩欧美在线免费| 国产三级视频在线看| 丁香花高清视频完整版在线观看| 亚洲乱码av中文一区二区| 偷拍自拍在线| 中国免费黄视频| 欧美少妇一区| 欧美三日本三级少妇99| 国产精品美女久久久久av超清| 91精品国产自产在线| 一区二区三区加勒比av| 99久久婷婷国产综合精品电影| 国产精品成人网| 国产网站一区二区| 天天操天天搞| 欧美最顶级的aⅴ艳星| 久久久www成人免费精品张筱雨| 国产原厂视频在线观看| 国产精品福利一区| 一级全黄裸体免费视频| 中文字幕影片免费在线观看| 亚洲va国产va天堂va久久| 欧美极品少妇xxxxⅹ裸体艺术| 99精产国品一二三产品香蕉| 美女www一区二区| 巨乳诱惑日韩免费av| 精品成人自拍视频| 亚洲欧美中文日韩在线v日本| 亚洲日本欧美天堂| 精品国产一区二区三区久久久蜜月| 国产又爽又黄无码无遮挡在线观看| 精品亚洲欧美日韩| 国产专区中文字幕| 免费日韩精品中文字幕视频在线| 久久精品老司机| 成人av综合在线| 国产免费播放一区二区| 免费在线看v| av在线电影网站| 快播av资源| 久久亚洲欧美| 成人三级视频在线观看| 国产精品亚洲成人| 999在线精品视频| 日本电影中文字幕| 黄网页在线观看| 北京富婆泄欲对白| 国产1区2区3区| 欧美一区二区在线视频观看| 国产精品一区二区免费| 国产精品久久久久久久久| av在线不卡精品| 国产精品国产三级欧美二区| 国产一区二区美女诱惑| 残酷重口调教一区二区| 日韩不卡在线视频| 久久超碰97人人做人人爱| 日韩高清在线不卡| 久久综合电影| 欧美 亚欧 日韩视频在线| 欧美美女福利视频| 91精品国产777在线观看| 精品国产人成亚洲区| 久久久亚洲国产美女国产盗摄| 一区二区三区视频国产日韩| 久久人人爽人人爽人人片av高清| 亚洲人成电影网站色mp4| 中文字幕中文字幕在线中文字幕三区| 久久精品欧美一区二区三区麻豆| 欧美日韩免费一区二区三区| 日韩激情片免费| 成年人在线网站| 欧美日韩国产精品激情在线播放| 中文字幕国产一区二区| 久久动漫网址| 精品人妻少妇AV无码专区| 欧美成人精品在线视频| 精品久久精品久久| 日本精品久久久久久| 97人人做人人爱| 国产高清不卡av| 日本在线免费网| 91免费网站视频| 欧美精品乱码久久久久久按摩| 欧美日韩亚洲一区二区三区| 视频一区亚洲| 成人区精品一区二区不卡| 欧美高清视频手机在在线| 国产精品伦子伦免费视频| 91在线亚洲| 久久精品亚洲精品| 国产免费福利网站| 亚洲精品一区二区三区在线观看| 国产经典一区二区三区| 波多野结衣中文字幕在线| 亚洲成人观看| 成人精品国产一区二区4080| 天堂中文字幕一二区| 91免费在线看片| 《视频一区视频二区| 日韩成人午夜电影| 熟女俱乐部一区二区视频在线| 成人在线观看www| 欧美壮男野外gaytube| 亚洲精品国产精品国自产网站按摩| 日本高清视频网站| 黄色视屏在线免费观看| 麻豆国产精品视频| 亚洲国产日韩欧美在线99| 中文在线观看免费| 精品国产一区二区三区久久久狼牙| 天天色天天射天天综合网| 久久久www| 欧美国产综合一区二区| 亚洲国产精品系列| 日韩电影在线观看完整免费观看| 亚洲午夜一级| 波多野结衣二区三区| 日韩av免费观影| 欧美区一区二区| 巨骚激情综合| 欧美黄页免费| 日韩av黄色网址| 91综合精品国产丝袜长腿久久| 亚洲天堂一二三| 日韩欧美三级在线观看| 国模人体一区二区| 日韩欧美精品在线不卡| 夜夜嗨av一区二区三区免费区| 视频在线不卡免费观看| 久久精品老司机| 欧美熟妇激情一区二区三区| 精品成人18| ,亚洲人成毛片在线播放| 国产va亚洲va在线va| 久久精品91久久久久久再现| 国产精品久久久久久久久久久久| 亚洲激情二区| 四虎影院影音| 精品无码人妻一区二区免费蜜桃| 亚洲大胆人体大胆做受1| 黄色小视频免费| 精品成人在线视频| 欧美日韩乱国产| 精彩视频一区二区三区| 精品欧美色视频网站在线观看| 亚洲啊啊啊啊啊| 色诱亚洲精品久久久久久| 久久久久久久久久免费视频| 欧美一区二区三区红桃小说| 欧美午夜视频在线观看| 午夜精品久久久久久久四虎美女版| 黄色网址免费| 国产精品视频男人的天堂| 91蝌蚪视频在线观看| 久久免费99精品久久久久久| 中文字幕亚洲欧美日韩2019| 一个人看的www视频免费观看| 国产精品正在播放| 亚洲欧美日韩电影| 成年在线电影| 欧美激情国产精品日韩| 丰满人妻av一区二区三区| 国产porn视频| 日韩精品一级中文字幕精品视频免费观看| 成人福利视频在线看| 美国一区二区三区在线播放| 成人在线免费视频| 女人18毛片毛片毛片毛片区二| 97国产一区二区| 国内在线高清免费视频| 成人国产精品免费观看动漫| 99精品国产99久久久久久白柏| 午夜黄色在线观看| a毛片在线免费观看| 国产欧美一区二区三区久久人妖| 性欧美长视频免费观看不卡| 亚洲理论在线观看| 情se视频网在线观看| 动漫一区在线| 四色最新网址| 9色在线视频网站| av中文字幕网址| 日本免费看片网站| 午夜视频在线观看一区二区| 亚洲视频在线观看免费| aa级大片欧美三级| 性高潮久久久久久久久久| 中文资源在线官网| 青青草精品视频在线| 日韩高清a**址| 国产欧美三级电影| 亚洲大胆人体大胆做受1| 老司机午夜精品99久久| 国产成人在线观看免费网站| 久久久久久香蕉网| 亚洲视频一区在线播放| 美女视频免费一区| 欧美一级二级三级| 亚洲午夜女主播在线直播| 成人精品一区二区三区中文字幕| 五月天丁香激情| 在线观看91精品国产入口| a级日韩大片| 日韩欧美中文字幕一区二区三区| 91精品国产91久久久久青草| 国产精品嫩模av在线| 欧美猛男性生活免费| 无套内谢丰满少妇中文字幕| 欧美xxx黑人xxx水蜜桃| 精品久久一二三| 久久精品91久久久久久再现| 日韩精品中文字幕久久臀| 妖精视频一区二区三区免费观看| 在线播放亚洲精品| 伦理欧美一区| 中文字幕乱码亚洲无线精品一区| 夜夜嗨av色综合久久久综合网| 亚洲人成影院在线| 成人自拍视频在线| 精品免费av| 天天干夜夜夜操| 国产精品区一区二区三| 日本国产欧美一区二区三区| 视频免费裸体网站| 波多野结衣电影免费观看| 日本wwwwww| 另类少妇人与禽zozz0性伦| 九一九一国产精品| 国产在线第二页| 久久精品国产一区二区三区肥胖| 国产日韩精品在线播放| 精品欧美一区二区三区| 91av久久| 欧美日韩国产色综合一二三四| 国产又粗又硬又长又爽| 国产精欧美一区二区三区| 91精品国产自产91精品| 99在线精品视频免费观看软件| 岛国大片在线观看| 高清国产午夜精品久久久久久| 国产精品欧美三级在线观看| 2019中文字幕在线视频| 久久久久久久久97| 国产乱码精品一区二区三区卡| 中文综合在线观看| 欧美久久一区| 日韩精品五月天| 黄色三级生活片| 欧美日韩国产经典色站一区二区三区| 波多野结衣在线网站| 印度午夜性春猛xxx交| 国产精品九九久久久久久久| 亚洲 日韩 国产第一区| 谁有免费的黄色网址| 超碰成人免费| 日韩永久免费视频| 久久精品aⅴ无码中文字字幕重口| 国产精品嫩草影院8vv8| 第九色区aⅴ天堂久久香| 国产精品探花一区二区在线观看| 99在线播放| 少妇精品导航| 濑亚美莉大战黑人中文字幕| 尤物视频在线看| 成人黄色网址在线观看| 成人福利在线观看| 91精品久久久久久粉嫩| 国产精品作爱| 黄色羞羞视频在线观看| 91精品丝袜国产高跟在线| 久久精品国产第一区二区三区最新章节| 久久久精品久久| 欧美日韩在线资源| 国产一二三区在线视频| 欧洲人成人精品| 成人不卡免费视频| 啊v在线视频| 日韩免费观看一区二区| 中文字幕v亚洲ⅴv天堂| 亚洲.国产.中文慕字在线| av有码在线观看| 亚洲欧美在线视频| 日韩视频一区二区三区在线播放免费观看| 久久精品国产2020观看福利| 国产在线视视频有精品| 成人免费不卡视频| 欧美日韩综合视频| 国产精品日本一区二区三区在线| 天天躁日日躁狠狠躁超碰2020| 欧美网站一区二区| 亚洲视频观看| 久久亚洲国产精品一区二区| 久热中文字幕在线精品首页| 一级片在线观看| 337p日本欧洲亚洲大胆色噜噜| 深爱激情综合网| 无码人妻精品一区二区50| 91超碰碰碰碰久久久久久综合| 国产乱人乱偷精品视频| 欧美极品影院| 午夜视频网站在线观看| 天堂一区二区在线免费观看| 日韩 欧美 精品| 欧美极品jizzhd欧美仙踪林| 欧美群妇大交群中文字幕| 精品久久久久成人码免费动漫| 精品丰满人妻无套内射| av毛片在线| 亚洲av无一区二区三区| 免费欧美一区| 国内精品视频在线播放| 九色成人搞黄网站| 日本韩国欧美中文字幕| av黄色一级| 久草在线视频资源| 91视频成人|