3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【笔记整理 - 多线程编程】

發(fā)布時(shí)間:2023/12/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【笔记整理 - 多线程编程】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

線程

編譯多線程程序時(shí),要注意參數(shù)

g++ -g 源文件.cpp -o 目標(biāo)文件 -lpthread

[root@localhost coding]# g++ -g test.cpp -o test -lpthread

或者

g++ -g -o 目標(biāo)文件 源文件.cpp -lpthread

[root@localhost coding]# g++ -g -o test test.cpp -lpthread

關(guān)于線程的注意事項(xiàng)(經(jīng)常忘)

1、雖然能按順序創(chuàng)建線程,但實(shí)際上的線程運(yùn)行順序是未知的。

2、主線程一退出,所有子線程都會(huì)退出。主線程要給子線程的運(yùn)行留下時(shí)間。

void* pth_foo(void* arg) {int i = (long)arg;printf("thread value : %d \n", i); }int main() {pthread_t pid[5];for(long i = 0; i < 5; ++i){if(pthread_create(&pid[i], NULL, pth_foo, (void*)(i + 1)) != 0)return -1;} }

因?yàn)橹骶€程創(chuàng)建完子線程后就立即退出,并導(dǎo)致程序結(jié)束,使得子線程完全沒(méi)來(lái)得及執(zhí)行。

解決方法一:

讓主線程休眠一段時(shí)間。

sleep(1);

解決方法二:

主線程調(diào)用pthread_exit函數(shù)退出,等到所有線程都執(zhí)行完畢后,進(jìn)程才結(jié)束。

pthread_exit(NULL); [root@localhost coding]# g++ -g test.cpp -o test -lpthread [root@localhost coding]# ./test thread value : 2 thread value : 3 thread value : 4 thread value : 5 thread value : 1

在多線程中如果要輸出信息,最好還是用printf,如果使用cout,會(huì)出現(xiàn)多個(gè)線程的輸出混雜在一起的情況。

cout是個(gè)全局變量,多線程在使用共享資源時(shí)沒(méi)有上鎖,所以導(dǎo)致輸出混合的情況吧。

創(chuàng)建線程 pthread_create()

#include <pthread.h> int pthread_create(pthread_t*thread, const pthread_attr_t* attr, void*(*start_routine)(void*), void* arg);

thread參數(shù)是新線程的標(biāo)識(shí)符,為一個(gè)整型。

attr參數(shù)用于設(shè)置新線程的屬性。給傳遞NULL表示設(shè)置為默認(rèn)線程屬性。

start_routine和arg參數(shù)分別指定新線程將運(yùn)行的函數(shù)參數(shù)。start_routine返回時(shí),這個(gè)線程就退出了

返回值:成功返回0,失敗返回錯(cuò)誤號(hào)。

獲取當(dāng)前線程id pthread_self()

線程id的類型是thread_t,它只在當(dāng)前進(jìn)程中保證是唯一的,在不同的系統(tǒng)中thread_t這個(gè)類型有不同的實(shí)現(xiàn),調(diào)用pthread_self()可以獲得當(dāng)前線程的id。

終止線程 pthread_exit() pthread_cancel()

終止某個(gè)線程而不終止整個(gè)進(jìn)程,可以有三種方法:

  • 從線程函數(shù)return。這種方法對(duì)主線程不適用,從main函數(shù)return相當(dāng)于調(diào)用exit。
  • 線程調(diào)用pthread_exit()終止自己。
  • 線程調(diào)用pthread_cancel()終止同一進(jìn)程中的另一個(gè)線程

線程返回 pthread_exit()

#include <pthread.h> void pthread_exit(void *status);

status:可以指向一個(gè)變量或數(shù)據(jù)結(jié)構(gòu),用于在線程結(jié)束時(shí)向外傳遞數(shù)據(jù),由用戶決定。

其它線程可以調(diào)用pthread_join()獲得這個(gè)指針。

注意!status指針不能指向線程的局部存儲(chǔ)對(duì)象,因?yàn)樵诰€程終止時(shí),所有局部存儲(chǔ)對(duì)象都會(huì)隨之銷毀。

例子:

#include <pthread.h> #include <errno.h>int val = 10;void* pth_foo(void* arg) {int i = 10;pthread_exit((void*)&val);// int *i = new int(15);// pthread_exit((void*)i); }int main() {pthread_t tid;int i = 0;if(pthread_create(&tid, NULL, pth_foo, NULL) != 0){printf("線程創(chuàng)建失敗。(%d:%s) \n", errno, strerror(errno));return -1;}// 線程函數(shù)傳出來(lái)的是個(gè)指針,所以也用指針接收int *pi; // 如果線程函數(shù)傳出來(lái)的是值,只要修改pi的類型就好了,下方代碼不用修改 // &pi為(void**),pi為(void*),剛好對(duì)應(yīng)“&val”——線程exit傳出的值~pthread_join(tid, (void**)&pi); // ~所以*pi就能得到全局變量val的數(shù)據(jù)printf("%d \n", *pi); }----------------------------------------- [root@localhost coding]# ./test 10 /* 如果 void* pth_foo(void* arg) {int i = 10;pthread_exit((void*)&i); } 則輸出的結(jié)果是0 */

補(bǔ)充:在本例中,pthread_exit用return替代也能正常運(yùn)行。

二者區(qū)別(網(wǎng)絡(luò)):return會(huì)回到調(diào)用者,pthread_exit會(huì)終止線程。

再補(bǔ)充:return可用于所有函數(shù),而pthread_exit專門用于結(jié)束線程。

且return不會(huì)自動(dòng)調(diào)用線程清理函數(shù)。

線程取消 pthread_cancel()

#include <pthread.h> int pthread_cancel(pthread_t thread);

thread:線程的標(biāo)識(shí)符

返回值:成功返回0,失敗返回錯(cuò)誤碼。

!補(bǔ)充

1、pthread_cancel后,thread內(nèi)容不變,至少用printf("%x\n", thread);輸出的結(jié)果在取消線程前后都是一致的。

2、對(duì)一個(gè)已經(jīng)取消的線程再次調(diào)用pthread_cancel,返回3。(對(duì)應(yīng)的錯(cuò)誤碼是3(No such process))

3、線程對(duì)pthread_cancel的默認(rèn)響應(yīng)狀態(tài)是PTHREAD_CANCEL_DEFERRED,線程運(yùn)行到取消點(diǎn)后才退出。

pthread_setcancelstate

(是否響應(yīng))

子線程可以通過(guò)調(diào)用pthread_setcancelstate,設(shè)置對(duì)pthread_cancel請(qǐng)求的響應(yīng)方式。

int pthread_setcancelstate(int state, int *oldstate); // 將線程的響應(yīng)方式設(shè)置為state,通過(guò)oldstate返回舊狀態(tài)。

PTHREAD_CANCEL_ENABLE:響應(yīng)取消。

PTHREAD_CANCEL_DISABLE:不響應(yīng)。

pthread_setcanceltype

(如何響應(yīng))

int pthread_setcanceltype(int type, int *oldtype);

pthread_setcanceltype設(shè)置線程的取消方式。

PTHREAD_CANCEL_ASYNCHRONOUS:異步取消,立即將線程取消;

PTHREAD_CANCEL_DEFERRED:推遲取消,線程運(yùn)行到**取消點(diǎn)(一些特定函數(shù))**后才取消。(取消點(diǎn):APUE P.363)

pthread_testcancel

調(diào)用這個(gè)函數(shù)時(shí),如果有某個(gè)取消請(qǐng)求處于掛起狀態(tài),且取消沒(méi)有設(shè)置為無(wú)效,那么線程就會(huì)被取消。

線程等待 pthread_join()

#include <pthread.h> int pthread_join(pthread_t thread, void **status);

thread:調(diào)用該函數(shù)的線程將掛起等待,直到id為thread的線程終止。

status:

1、等待的線程通過(guò)return返回

? status所指向的地址存放的是線程函數(shù)的返回值。

2、等待的線程被其它線程調(diào)用函數(shù)pthread_cancel停止

? status所指向的地址存放的是常數(shù)PTHREAD_CANCELED。

3、等待的線程自己調(diào)用pthread_exit終止

? 可通過(guò)status獲取線程終止時(shí)保存的數(shù)據(jù)。如果不需要改數(shù)據(jù),傳入NULL。

線程函數(shù)退出后。exit時(shí)傳入?yún)?shù)保存了數(shù)據(jù),就能通過(guò)status獲取這個(gè)數(shù)據(jù)。

如果等待的線程調(diào)用pthread_exit時(shí)傳入?yún)?shù)保存了數(shù)據(jù),就能通過(guò)status獲取這個(gè)數(shù)據(jù)。

如果有多個(gè)線程調(diào)用pthread_join獲取同一個(gè)線程的執(zhí)行結(jié)果,則只有一個(gè)線程能得到結(jié)果,其余線程都將執(zhí)行失敗。

(3、)的例子:

... // 已知線程函數(shù)會(huì)用pthread_exit保存一個(gè)int類型變量int val;// 傳入變量val的地址pthread_join(tid, (void**)&val);// 函數(shù)返回后,變量val指向得到pthread_exit保存的數(shù)據(jù)printf("%d \n", val);

返回值:成功返回0,失敗返回錯(cuò)誤碼(可以當(dāng)做int用)。可能出現(xiàn)的錯(cuò)誤碼:

錯(cuò)誤碼描述
EDEADLK可能引起死鎖,比如2個(gè)線程互相針對(duì)對(duì)方調(diào)用pthread_join,或針對(duì)自身調(diào)用pthread_join
EINVAL目標(biāo)線程是不可回收的(分離狀態(tài)),或已有其它線程在回收該目標(biāo)線程
ESRCH目標(biāo)線程不存在

線程的結(jié)合、分離概念(線程資源回收)

在任何一個(gè)時(shí)間點(diǎn)上,線程是可結(jié)合的(joinable)或者是分離的(detached)

一個(gè)可結(jié)合的線程能夠被其他線程收回其資源和殺死。在被其他線程回收之前,它的存儲(chǔ)器資源(例如棧)不釋放。(默認(rèn)情況下線程的創(chuàng)建都是可結(jié)合的)

一個(gè)分離的線程是不能被其他線程回收或殺死,它的存儲(chǔ)器資源在它終止時(shí)由系統(tǒng)自動(dòng)釋放

如果一個(gè)可結(jié)合線程結(jié)束運(yùn)行但沒(méi)有被join,會(huì)導(dǎo)致部分資源沒(méi)有被回收,所以創(chuàng)建線程者應(yīng)該調(diào)用pthread_join來(lái)等待線程運(yùn)行結(jié)束,并得到線程的退出代碼,回收其資源。

在調(diào)用pthread_join后,如果該線程沒(méi)有運(yùn)行結(jié)束,調(diào)用者會(huì)被阻塞。如何解決這種情況?

答:將等待的線程設(shè)置為分離狀態(tài)。也就不需要再調(diào)用pthread_join等待該線程。

分離線程 pthread_detach()

#include <pthread.h> int pthread_detach(pthread_t thread);

thread:線程id

返回值:函數(shù)成功,返回0;失敗,返回錯(cuò)誤碼。

能在主線程中調(diào)用,或子線程中調(diào)用都可以。重要的是要傳入正確的線程id。

線程清理 pthread_cleanup_push/pop

線程可以安排它退出時(shí)需要調(diào)用的函數(shù)。退出函數(shù)可以建立多個(gè),記錄在棧中。

void pthread_cleanup_push(void (*routine)(void *), void *arg);

routine:函數(shù)名

arg:參數(shù)

void pthread_cleanup_pop(int execute);

execute:傳入非0參數(shù),彈出并執(zhí)行;傳入0,只彈出,不執(zhí)行。

線程函數(shù)調(diào)用pthread_exit時(shí),會(huì)按出棧的順序執(zhí)行所有清理函數(shù)。使用return退出的線程函數(shù)不會(huì)執(zhí)行清理函數(shù)。

鎖 !

http://c.biancheng.net/thread/vip_8615.html

大概描述:互斥鎖、信號(hào)量、條件變量、讀寫鎖(還有自旋鎖、屏障等)

  • 互斥鎖:只允許一個(gè)線程進(jìn)入臨界區(qū);
  • 信號(hào)量:允許n個(gè)線程進(jìn)入臨界區(qū);
  • 條件變量:當(dāng)某線程滿足特定條件后進(jìn)入臨界區(qū),通常(幾乎是必須)和互斥鎖配合使用;
  • 讀寫鎖:大多數(shù)線程能讀臨界區(qū),少數(shù)線程能寫臨界區(qū)。允許同時(shí)有多個(gè)讀者進(jìn)入,只允許1個(gè)作者進(jìn)入;有讀者時(shí)不能有作者,有作者時(shí)不能有讀者。

補(bǔ)充:條件變量所謂的“滿足特定條件后進(jìn)入臨界區(qū)”是由代碼結(jié)構(gòu)實(shí)現(xiàn)的,即它自身并沒(méi)有提供實(shí)現(xiàn)該功能的函數(shù)。

大概的代碼結(jié)構(gòu):一個(gè)線程到進(jìn)入?yún)^(qū)調(diào)用pthread_cond_wait等待,另一個(gè)線程達(dá)到滿足的條件后調(diào)用pthread_cond_signal解鎖。

所謂的讀寫鎖其實(shí)就是提供了2個(gè)上鎖的方式而已,具體的動(dòng)作還是得由用戶自覺(jué)操作。

線程同步(鎖)

互斥變量為pthread_mutex_t類型。初始化時(shí)可以設(shè)置為常量PTHREAD_MUTEX_INITIALIZER(只適用于靜態(tài)分配的互斥量)或用pthread_mutex_init()初始化。

書(shū)上的例子

**1、**一個(gè)被互斥鎖(作為成員變量)保護(hù)的結(jié)構(gòu)foo,P.322:

#include <stdlib.h> #include <pthread.h>struct foo {int f_count;pthread_mutex_t f_lock;int f_id; }foo* foo_alloc(int id) {foo *fp;if(fp = (foo*)malloc(sizeof(foo)) != NULL){fp->f_count = 1;fp->id = id;if(pthread_mutex_init(&fp->f_lock, NULL) != 0){free(fp);return 0;}}// 繼續(xù)初始化操作 }void foo_hold(foo* fp) {pthread_mutex_lock(&fp->f_lock);fp->f_count++;pthread_mutex_unlock(&fp->f_lock); }void foo_rele(foo* fp) {pthread_mutex_lock(&fp->f_lock);if(--fp->f_count == 0){pthread_mutex_unlock(&fp->f_lock);pthread_mutex_destroy(&fp->f_lock);free(fp);}elsepthread_mutex_unlock(&fp->f_lock); }

**2、**在程序中使用多個(gè)foo對(duì)象,多個(gè)foo對(duì)象用哈希表組織,增加一個(gè)互斥鎖2用于保護(hù)哈希表。P.323。

**3、**訪問(wèn)foo結(jié)構(gòu)的成員變量f_cout也使用互斥鎖2進(jìn)行保護(hù)。P.325。兩種用途使用相同的鎖(增加了鎖的粒度),簡(jiǎn)化了代碼結(jié)構(gòu)。

線程與信號(hào)

外界信號(hào)不會(huì)中斷子線程的運(yùn)行(除非是終止進(jìn)程的信號(hào))。

在多線程程序中,捕獲信號(hào)的函數(shù)放在哪都一樣,通常放在主函數(shù)中。

多線程程序中,在任一線程中調(diào)用signal或sigaction都會(huì)改變所有信號(hào)的信號(hào)處理函數(shù)。

主線程向子線程發(fā)送信號(hào)用pthread_kill函數(shù)。

多線程服務(wù)器的退出

退出信號(hào)(2 和 15)處理函數(shù)的流程:

1、關(guān)閉監(jiān)聽(tīng)socket;

2、用pthread_cancel終止所有子線程;

3、釋放資源(IO、文件、內(nèi)存等);

4、子線程執(zhí)行清理函數(shù)(在里面關(guān)閉通信socket);

多線程服務(wù)器中,子線程通常都是分離狀態(tài)的,且通常都是立即取消狀態(tài)。

I/O復(fù)用

《APUE》中的標(biāo)題是“I/O多路轉(zhuǎn)接”

需求背景

1、一些函數(shù),如read、accept在被調(diào)用時(shí),會(huì)阻塞調(diào)用函數(shù)的線程。

read(文件描述符, buf, bufsize); accept(套接字描述符, socketaddr, socketlen);

2、可用的描述符數(shù)量可能會(huì)小于需求數(shù)量,例如要打開(kāi)很多個(gè)文件、要響應(yīng)很多個(gè)客戶端的連接等。

使用I/O多路轉(zhuǎn)接技術(shù),先構(gòu)造一張感興趣的描述符列表,然后調(diào)用一個(gè)函數(shù),直到這些描述符中的一個(gè)已經(jīng)準(zhǔn)備好響應(yīng)操作后,函數(shù)返回。

select

#include <sys/select.h>int select(int maxfdp1, fd_set* restrict readfds, fd_set* restrict writefds, fd_set* restruct execptfds, struct timeval* restruct tvptr);返回值:準(zhǔn)備就緒的描述符數(shù)目;超時(shí)——0;出錯(cuò)——-1。

從后向前介紹參數(shù)

tvptr:等待時(shí)間,timeval結(jié)構(gòu),2個(gè)成員:time_t tv_sec、long tv_nsec分別表示s和ns。

struct timeval {time_t tv_sec; //秒suseconds_t tv_usec; //微秒 1ms = 10^(-6)s };

? tvptr == NULL:永久等待,直到一個(gè)描述符已經(jīng)準(zhǔn)備好,或捕捉到一個(gè)信號(hào)。捕捉到信號(hào)會(huì)使函數(shù)返回-1,errno設(shè)置為EINTR

? tvptr->tv_sec == 0 && tvptr->tv_use c== 0:不等待,立即測(cè)試所有指定的描述符并返回。

? tvptr->tv_sec != 0 && tvptr->tv_usec != 0:等待指定的時(shí)間。當(dāng)指定的任一描述符準(zhǔn)備好,或超時(shí)時(shí)返回。

readfds、writefds、execptfds:指向描述符集的指針。描述符集為fd_set類型,基本上可認(rèn)為是一個(gè)很大的字節(jié)數(shù)組。

fd_set相關(guān)的操作函數(shù)

#include <sys/select.h>int FD_ISSET(int fd, fd_set *fdset); 返回值:如果fd在字符集中,返回非0值;否則返回0。void FD_CLR(int fd, fd_set *fdset);void FD_SET(int fd, fd_set *fdset);void FD_ZERO(fd_set *fdset);

從視頻作者給出的例子看,select關(guān)心的描述符集中有描述符準(zhǔn)備好了就會(huì)返回,然后下方代碼就要用

for(i=0; i<maxfdp; ++i ) {...FD_ISSET(i, 字符集);... }

的方式對(duì)范圍內(nèi)的所有描述符進(jìn)行測(cè)試。如果被打開(kāi)的描述符是想要的,就執(zhí)行相關(guān)操作。

**注意!**所謂的“被打開(kāi)的描述符”是在調(diào)用select函數(shù)前,由程序員自己通過(guò)調(diào)用FD_SET函數(shù)來(lái)設(shè)置的。

maxfdp1:最大描述符編號(hào)值+1。即指定描述符集的右區(qū)間。

[0, maxfdp1)

3個(gè)描述符集

readfds:讀,常用。writefds:寫,只有在輸出緩沖區(qū)滿時(shí)才會(huì)被阻塞,很少會(huì)遇到。execptfds:在網(wǎng)絡(luò)編程中用不到。

pselect

添加了信號(hào)屏蔽參數(shù),但很少用到,因?yàn)橛衅渌姆绞狡帘涡盘?hào)。

select水平觸發(fā)

如果一個(gè)標(biāo)識(shí)符的事件沒(méi)有被處理完,select會(huì)再次報(bào)告該事件。(例如沒(méi)有將客戶端傳送到的數(shù)據(jù)一次讀完)

select 缺點(diǎn)

1、默認(rèn)支持的描述符數(shù)量只有1024,可以修改,但數(shù)量越多,效率越低。

2、每次確認(rèn)描述符都要遍歷select。

代碼(已運(yùn)行,能響應(yīng)多個(gè)客戶端)

#include "CTcpServer.h" #include <stdio.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <stdlib.h> #include <signal.h> #include <pthread.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/select.h>CTcpServer g_TcpServer;// 處理SIGINT和SIGTERM信號(hào) void EXIT(int sig) {printf("程序退出,信號(hào)值=%d \n", sig);close(g_TcpServer.m_listenfd);exit(0); }int main() {if (g_TcpServer.InitServer(5000) == false){printf("服務(wù)端初始化失敗,程序退出。\n");return -1;}fd_set readfdset;int maxfd;int listensock = g_TcpServer.m_listenfd;FD_ZERO(&readfdset);FD_SET(listensock, &readfdset);maxfd = listensock;while (1){fd_set tmpfdset = readfdset;int infds = select(maxfd + 1, &tmpfdset, NULL, NULL, NULL);if (infds < 0){printf("select() failed. \n");perror("select()");break;}if (infds = 0){printf("select() timeout. \n");continue;}for (int eventfd = 0; eventfd <= maxfd; ++eventfd){if (FD_ISSET(eventfd, &tmpfdset) <= 0)continue;if (eventfd == listensock){sockaddr_in client;socklen_t len = sizeof(client);int clientsock = accept(listensock, (sockaddr*)&client, &len);if (clientsock < 0){printf("accept() failed\n");continue;}printf("client(socket = %d) connect success.\n", clientsock);FD_SET(clientsock, &readfdset);if (maxfd < clientsock) maxfd = clientsock;continue;}else{char strbuffer[1024];memset(strbuffer, 0, sizeof(strbuffer));ssize_t isize = read(eventfd, strbuffer, sizeof(strbuffer));if (isize <= 0){printf("client(evenfd = %d) disconnected. \n", eventfd);close(eventfd);FD_CLR(eventfd, &readfdset);if (eventfd == maxfd){for (int i = maxfd; i > 0; --i)if (FD_ISSET(i, &readfdset)){maxfd = i; break;}printf("maxfd = %d, update. \n", maxfd);}continue;}printf("recv(eventfd = %d, size = %d):%s \n)", eventfd, isize, strbuffer);write(eventfd, strbuffer, strlen(strbuffer));}}}return 0; }

問(wèn)題(似乎已解決)

作者代碼中調(diào)用select時(shí),要先創(chuàng)建一個(gè)fd_set類型的臨時(shí)變量tmpfdset,讓該臨時(shí)變量參與select函數(shù),在遍歷查找有事件響應(yīng)的標(biāo)識(shí)符時(shí),使用的也是臨時(shí)變量tmpfdset。

fd_set tmpfdset = readfdset;int infds = select(maxfd+1, &tmpfdset, NULL, NULL, NULL);...for(int eventfd = 0; eventfd <= maxfd; ++eventfd){if(FD_ISSET(eventfd, &tmpfdset) <= 0)continue;if(eventfd == listensock)...}

經(jīng)過(guò)自己的粗略檢查(在select前后檢查tmpfdset標(biāo)識(shí)符4的值)得出的結(jié)論:

似乎select在返回時(shí),會(huì)將有事件的描述符以外的所有描述符都清零,所以使用for循環(huán)從0開(kāi)始遍歷一定且只會(huì)遇到發(fā)生了事件的那個(gè)描述符。

嘗試過(guò)直接將readfdset傳入select,結(jié)果服務(wù)端只能響應(yīng)第一個(gè)連入的客戶端。

驗(yàn)證代碼:

#define CHECK(x) printf("readfdset[%d] is %d \n", x, FD_ISSET(x, &tmpfdset))...fd_set tmpfdset = readfdset;CHECK(4); // 經(jīng)過(guò)幾次實(shí)踐,已知描述符4一定對(duì)應(yīng)第一個(gè)連接的客戶端socketint infds = select(maxfd+1, &tmpfdset, NULL, NULL, NULL);...for(int eventfd = 0; eventfd <= maxfd; ++eventfd){if(FD_ISSET(eventfd, &tmpfdset) <= 0)continue;CHECK(4);if(eventfd == listensock)...}

結(jié)果:第1個(gè)客戶端的對(duì)應(yīng)描述符是4

... ----------------------- readfdset[4] is 1 // 調(diào)用select之前 readfdset[4] is 0 // 調(diào)用select之后 recv(eventfd = 5, size = 3): 345 ----------------------- readfdset[4] is 1 readfdset[4] is 1 recv(eventfd = 4, size = 3): qwe

如果不是第1個(gè)客戶端的事件導(dǎo)致select返回,則select返回后,對(duì)應(yīng)的FD_ISSET(客戶端1, tmpfdset)會(huì)返回0。

poll

#include <poll.h>int poll(struct pollfd fdarray[]. nfds_t nfds, int timeout);返回值:成功——準(zhǔn)備就緒的描述符數(shù)目;超時(shí)——返回0;出錯(cuò)——返回-1

nfds:就是select的maxfdp1。

struct pollfd {inf fd; // 文件標(biāo)識(shí)符。short events; // 期待標(biāo)識(shí)符上發(fā)生的事件short revents; // 標(biāo)識(shí)符發(fā)生事件后的返回值 }

fd:若設(shè)置為-1,則表示忽略events,且revents返回0。

events:若設(shè)置為0,則忽略所有fd發(fā)生的事件,且revents返回0。輸入的參數(shù)似乎可以用“|”連接。

revents:是個(gè)輸出參數(shù),值由內(nèi)核填充,表示發(fā)生的事件。

例子中的代碼結(jié)構(gòu)與select基本一致。

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <poll.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/fcntl.h>// ulimit -n #define MAXNFDS 1024// 初始化服務(wù)端的監(jiān)聽(tīng)端口。 int initserver(int port);int main(int argc,char *argv[]) {...// 初始化服務(wù)端用于監(jiān)聽(tīng)的socket。int listensock = initserver(atoi(argv[1]));printf("listensock=%d\n",listensock);...int maxfd; // fds數(shù)組中需要監(jiān)視的socket的大小。struct pollfd fds[MAXNFDS]; // fds存放需要監(jiān)視的socket。// ------------- 等價(jià)于FD_ZERO() -------------for (int ii=0;ii<MAXNFDS;ii++) fds[ii].fd=-1; // 初始化數(shù)組,把全部的fd設(shè)置為-1。// 把listensock添加到數(shù)組中。fds[listensock].fd=listensock;fds[listensock].events=POLLIN; // 有數(shù)據(jù)可讀事件,包括新客戶端的連接、客戶端socket有數(shù)據(jù)可讀和客戶端socket斷開(kāi)三種情況。maxfd=listensock;while (1){ // ------------- 阻塞 -------------int infds = poll(fds, maxfd+1, 5000);// 返回失敗。if (infds < 0){printf("poll() failed.\n"); perror("poll():"); break;}// 超時(shí)。if (infds == 0){printf("poll() timeout.\n"); continue;}// 檢查有事情發(fā)生的socket,包括監(jiān)聽(tīng)和客戶端連接的socket。// 這里是客戶端的socket事件,每次都要遍歷整個(gè)集合,因?yàn)榭赡苡卸鄠€(gè)socket有事件。for (int eventfd=0; eventfd <= maxfd; eventfd++){if (fds[eventfd].fd<0) continue;// ------------- 與select略有不同,這里先檢查“.revents”事件類型 -------------if ((fds[eventfd].revents&POLLIN)==0) continue; // ------------- 未知 -------------fds[eventfd].revents=0; // 先把revents清空。// ------------- “.f”非零,且“.revents&POLLIN”非零,再檢查匹配標(biāo)識(shí)符 -------------if (eventfd==listensock){ // ------------- 下文內(nèi)容與select基本相同 -------------// 如果發(fā)生事件的是listensock,表示有新的客戶端連上來(lái)。struct sockaddr_in client;socklen_t len = sizeof(client);int clientsock = accept(listensock,(struct sockaddr*)&client,&len);if (clientsock < 0){printf("accept() failed.\n"); continue;}printf ("client(socket=%d) connected ok.\n",clientsock);if (clientsock>MAXNFDS){ printf("clientsock(%d)>MAXNFDS(%d)\n",clientsock,MAXNFDS); close(clientsock); continue;}// ------------- poll登記新標(biāo)識(shí)符 -------------fds[clientsock].fd=clientsock;fds[clientsock].events=POLLIN; fds[clientsock].revents=0; if (maxfd < clientsock) maxfd = clientsock;printf("maxfd=%d\n",maxfd);continue;}else {// 客戶端有數(shù)據(jù)過(guò)來(lái)或客戶端的socket連接被斷開(kāi)。char buffer[1024];memset(buffer,0,sizeof(buffer));// 讀取客戶端的數(shù)據(jù)。ssize_t isize=read(eventfd,buffer,sizeof(buffer));// 發(fā)生了錯(cuò)誤或socket被對(duì)方關(guān)閉。if (isize <=0){printf("client(eventfd=%d) disconnected.\n",eventfd);close(eventfd); // 關(guān)閉客戶端的socket。fds[eventfd].fd=-1;// 重新計(jì)算maxfd的值,注意,只有當(dāng)eventfd==maxfd時(shí)才需要計(jì)算。if (eventfd == maxfd){for (int ii=maxfd;ii>0;ii--){if ( fds[ii].fd != -1){maxfd = ii; break;}}printf("maxfd=%d\n",maxfd);}continue;}printf("recv(eventfd=%d,size=%d):%s\n",eventfd,isize,buffer);// 把收到的報(bào)文發(fā)回給客戶端。write(eventfd,buffer,strlen(buffer));}}}return 0; }

epoll

相關(guān)數(shù)據(jù)結(jié)構(gòu)

typedef union epoll_data {void *ptr;int fd; // 目前唯一關(guān)注的成員uint32_t u32;uint64_t u64; } epoll_data_t;struct epoll_event {uint32_t events; /* Epoll events */epoll_data_t data; /* User data variable */ };

events的取值

EPOLLIN: 關(guān)聯(lián)的文件已經(jīng)對(duì)read操作可用。(常用)EPOLLPUT: 關(guān)聯(lián)的文件已經(jīng)對(duì)write操作可用。(常用)EPOLLRDHUP: 對(duì)應(yīng)的socket連接的已經(jīng)關(guān)閉。(常用)EPOLLPRI: 緊急消息對(duì)read操作可用。(~)EPOLLERR: 對(duì)應(yīng)的文件發(fā)生錯(cuò)誤,默認(rèn)等待,不需要再手動(dòng)設(shè)置。(-)EPOLLHUP: 對(duì)應(yīng)的文件掛起,默認(rèn)等待,不需要再手動(dòng)設(shè)置。(-)EPOLLET: 設(shè)置為模式邊緣觸發(fā)模式。(默認(rèn)是水平觸發(fā)模式)EPOLLONESHOT: “Sets the one-shot behavior for the associated file descriptor.”

代碼結(jié)構(gòu)

// 1、需要1個(gè)int類型接收epoll_create函數(shù)的返回值(標(biāo)識(shí)符,表示eopll實(shí)例),epoll_create的參數(shù)大于0即可,沒(méi)什么意義 int epollfd = epoll_create(1);// 2、創(chuàng)建一個(gè)epoll_event結(jié)構(gòu)并初始化,設(shè)定標(biāo)識(shí)符和監(jiān)聽(tīng)的事件 struct epoll_event ev; ev.data.fd = listensock; ev.events = EPOLLIN;// 3、使用epoll_ctl函數(shù)進(jìn)行設(shè)置 epoll_ctl(epollfd, EPOLL_CTL_ADD, listensock, &ev);// 4、while。添加刪除socket標(biāo)識(shí)符的方式與2、3流程一致 while (1) {// MAXEVENTS的值由實(shí)際需求決定struct epoll_event events[MAXEVENTS]; // -------------------------------int infds = epoll_wait(epollfd, events, MAXEVENTS, -1);if (infds < 0)...if (infds == 0)... // 查找的范圍由epoll_wait的返回值決定for (int i=0; i<infds; i++){if ((events[i].data.fd == listensock) &&(events[i].events & EPOLLIN)){...響應(yīng)客戶端連接...int clientsock = accept(li...;...// ------------------------------- // 復(fù)用全局變量ev,設(shè)置好參數(shù)后用epoll_ctl添加// 把新的客戶端添加到epoll中。memset(&ev,0,sizeof(struct epoll_event));ev.data.fd = clientsock;ev.events = EPOLLIN;epoll_ctl(epollfd, EPOLL_CTL_ADD, clientsock, &ev);}else if (events[i].events & EPOLLIN){...與客戶端通信...if (isize <=0) // 發(fā)生錯(cuò)誤或連接被斷開(kāi){// 把已斷開(kāi)的客戶端從epoll中刪除。 // ------------------------------- // 執(zhí)行流程與上文的添加基本一致,就只是修改了epoll_ctl的1個(gè)參數(shù)而已memset(&ev, 0, sizeof(struct epoll_event));ev.data.fd = events[i].data.fd;ev.events = EPOLLIN;epoll_ctl(epollfd, EPOLL_CTL_DEL, events[i].data.fd, &ev);close(events[i].data.fd);continue;}}} }// 5、關(guān)閉epoll close(epollfd);

水平觸發(fā)和邊緣觸發(fā)

epoll默認(rèn)使用水平觸發(fā)。

水平觸發(fā):報(bào)告了fd后事件沒(méi)被處理或數(shù)據(jù)沒(méi)有被全部讀取,epoll會(huì)立即再報(bào)告該fd。

邊緣觸發(fā):報(bào)告了fd后事件沒(méi)被處理或數(shù)據(jù)沒(méi)有被全部讀取,epoll會(huì)下次再報(bào)告該fd。

----------------------------

pthread_equal

int pthread_equal(pthread_t tid1, pthread_t tid2);返回值:相等——非0值,不相等——0。

pthread_t類型是采用數(shù)據(jù)類型來(lái)實(shí)現(xiàn)的,所以不能作為整數(shù)處理(==),得用pthread_equal來(lái)進(jìn)行比較。

一個(gè)打印pthread_t類型變量的方法

// “%lu” 和 “%lx” pthread_t tid = pthread_self(); printf("tid: %lu(0x%lx) \n", (unsigned long)tid, (unsigned long)tid);// 輸出 tid: 140048119990016(0x7f5f7e718700)

pthread_self

pthread_t pthread_self(void);返回值:調(diào)用函數(shù)的線程ID

通常與pthread_equal一起使用。

pthread_create

int pthread_create(pthread_t* restrict tidp, constpthread_attr_t* restrict attr, void* (*start_rtn)(void*), void* restrict arg);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

restrict:C語(yǔ)言中的一種類型限定符(Type Qualifiers),用于告訴編譯器,對(duì)象已經(jīng)被指針?biāo)?#xff0c;不能通過(guò)除該指針外所有其他直接或間接的方式修改該對(duì)象的內(nèi)容。

創(chuàng)建后的線程ID存入tidp所指的地址;

attr:屬性;

start_rtn:函數(shù)指針

arg:函數(shù)參數(shù)

線程能按順序創(chuàng)建,但不一定會(huì)按順序執(zhí)行。

函數(shù)調(diào)用失敗時(shí)會(huì)返回錯(cuò)誤碼,不會(huì)設(shè)置errno。

pthread_exit

void pthread_exit(void* rval_ptr);

在不終止整個(gè)進(jìn)程的情況下,停止線程。

rval_ptr指針指向線程要返回的數(shù)據(jù)。其它線程可以通過(guò)pthread_join訪問(wèn)到這個(gè)指針。(如果要返回的數(shù)據(jù)大小<=sizeof(void*),則可以通過(guò)強(qiáng)制轉(zhuǎn)換直接返回?cái)?shù)據(jù)。)

**注意:**如返回的是個(gè)指針,必須確保在線程結(jié)束后,指針?biāo)竷?nèi)存數(shù)據(jù)仍有效。如果返回的是值,則不需要擔(dān)心。

void* func_one(void* ptr) {int val = 10;pthread_exit((void*)(long)val);// pthread_exit((void*)(long)20);// 兩種方法都能有效將返回值傳遞出去 }

SIGSEGV

如果上方代碼是:

void* func_one(void* ptr) {int* val = 0;*val = 30;pthread_exit((void*)(long)val); }

在gdb調(diào)試中就會(huì)有如下警告:

Program terminated with signal SIGSEGV, Segmentation fault.

SIGSEGV是當(dāng)一個(gè)進(jìn)程執(zhí)行了一個(gè)無(wú)效的內(nèi)存引用,或發(fā)生段錯(cuò)誤時(shí)發(fā)送給它的信號(hào)。

與return的區(qū)別

return只是退出了函數(shù),線程仍有可能存在;pthread_exit讓線程停止。

二者都會(huì)調(diào)用清理函數(shù),其它的區(qū)別還看不懂。

pthread_join

int pthread_join(pthread_t thread, void** rval_ptr);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

如果線程被取消(pthread_cancel),rval_ptr所指向的內(nèi)存單元被設(shè)置為PTHREAD_CANCELED(好像值是-1)。

如果不關(guān)心線程返回值,rval_ptr可以直接填NULL。

獲取返回值:

幫助理解:pthread_join返回后,rval_ptr所指向的內(nèi)存單元保存的就是pthread_exit的返回值(可能是數(shù)據(jù)本身,也可能是指針)。

// 1、返回?cái)?shù)據(jù)本身 void* func_one(void* ptr) {g_val = 10;pthread_exit((void*)(long)g_val); } int main() {pthread_t thread_one;pthread_create(&thread_one, NULL, func_one, NULL);int i;// &i所指向的內(nèi)存單元就是i的值,也就是g_val的值pthread_join(thread_one, (void**)&i);printf("%d\n", i); }// 2、返回的是指針 void* func_one(void* ptr) {g_val = 10;pthread_exit((void*)&g_val); } int main() {pthread_t thread_one;pthread_create(&thread_one, NULL, func_one, NULL);int *i; // &i所指向的內(nèi)存單元是指針i,仍是一個(gè)指針,也就是&g_val,解一次引用后得到數(shù)據(jù)pthread_join(thread_one, (void**)&i);printf("%d\n", *i); }

pthread_cancel

int pthread_cancel(pthread_t tid);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

終止同一進(jìn)程中的其它線程。

調(diào)用這一函數(shù)只是提出請(qǐng)求,并不會(huì)阻塞等待。

線程安排它退出時(shí)需要調(diào)用的函數(shù)。這樣的函數(shù)被稱為線程清理處理程序,可以設(shè)置多個(gè),存入棧中。

例子:讓一個(gè)子線程取消另一個(gè)子線程,參數(shù)的傳遞好像有點(diǎn)麻煩

int main() {...// 將tid1的地址轉(zhuǎn)為void*后傳給線程函數(shù)th_cancelpthread_create(&tid2, NULL, th_cancel, (void*)&tid1);... }void* th_cancel(void* arg) { // 先將arg轉(zhuǎn)為pthread_t*類型的指針,然后對(duì)其解引用*(...)pthread_cancel(*((pthread_t*)arg)); }

pthread_cleanup_push/pop

設(shè)置線程清理處理程序。

線程結(jié)束時(shí)要執(zhí)行一些善后工作,這些代碼不方便寫在主函數(shù)中,所以有了這對(duì)函數(shù)。

void pthread_cleanup_push(void (*rtn)(void*), void *arg);void pthread_cleanup_pop(int execute);
  • 二者是以宏的形式定義的,pthread_cleanup_push帶有一個(gè)"{",而pthread_cleanup_pop帶有一個(gè)"}",所以必須成對(duì)使用!

  • 如果使用pthread_cleanup_pop(0),則只會(huì)將棧中的一個(gè)清理程序彈出,不執(zhí)行。傳入任意非0的值都會(huì)彈出并執(zhí)行函數(shù)。

清理函數(shù)的執(zhí)行時(shí)機(jī)

**!!**清理函數(shù)執(zhí)行時(shí),執(zhí)行多少個(gè)清理函數(shù),按什么順序執(zhí)行,都取決于此時(shí)棧中的情況!!

**1、**函數(shù)運(yùn)行到pthread_cleanup_pop(非0);

**2、**線程退出。自行退出或被cancel都能觸發(fā)清理函數(shù),且會(huì)執(zhí)行棧中的所有清理函數(shù)。

注意!:如果主線程-進(jìn)程終止而導(dǎo)致的子線程終止,可能會(huì)使清理函數(shù)來(lái)不及執(zhí)行

所以主線程總是要給子線程的運(yùn)行留下足夠的時(shí)間。

再補(bǔ)充:清理函數(shù)要被執(zhí)行,一個(gè)大前提是“棧中存有清理函數(shù)”,即線程退出時(shí),pthread_cleanup_pop被執(zhí)行的次數(shù)必須少于pthread_cleanup_push。

誤區(qū)糾正

誤區(qū)1:pthread_cleanup_pop僅僅是用來(lái)設(shè)置棧中函數(shù)在彈出時(shí)是否執(zhí)行。

糾正:pthread_cleanup_pop既是函數(shù)調(diào)用,也會(huì)在線程被結(jié)束時(shí)彈出并調(diào)用清理函數(shù)。

證:

void* func_one(void* ptr) {pthread_cleanup_push(exit_foo, (void*)(long)1);pthread_cleanup_push(exit_foo, (void*)(long)2);// pthread_exit((void*)(long)5);// 主線程用此函數(shù)創(chuàng)建了子線程后,立即調(diào)用pthread_cancelsleep(5);printf("before pop \n");pthread_cleanup_pop(1);pthread_cleanup_pop(1);printf("after pop, sleep \n");sleep(5);printf("thread exit \n");pthread_exit((void*)(long)10); }輸出結(jié)果:和預(yù)料的一樣,子線程在退出時(shí)按棧順序調(diào)用了清理函數(shù) [root@localhost coding]# make run g++ -g -o test test.cpp -lpthread ./test thread cleanup 2 thread cleanup 1 -1------------------------------------------------------void* func_one(void* ptr) {pthread_cleanup_push(exit_foo, (void*)(long)1);pthread_cleanup_push(exit_foo, (void*)(long)2);// pthread_exit((void*)(long)5);// 主線程創(chuàng)建子線程后,等待 // sleep(5);printf("before pop \n");pthread_cleanup_pop(1);pthread_cleanup_pop(1);printf("after pop, sleep \n");sleep(5);printf("thread exit \n");pthread_exit((void*)(long)10); }輸出結(jié)果:就像調(diào)用了函數(shù)一樣,在線程結(jié)束前就執(zhí)行了清理函數(shù),等到線程退出時(shí)不再執(zhí)行清理函數(shù) [root@localhost coding]# make run ./test before pop thread cleanup 2 thread cleanup 1 after pop, sleep // (約5s后) thread exit 10

!收獲

被pthread_cleanup_push和pthread_cleanup_pop“包裹”起來(lái)的代碼段,就是這對(duì)push/pop要負(fù)責(zé)善后的代碼段。

實(shí)際應(yīng)用中應(yīng)該是像這樣吧?:

pthread_cleanup_push(文件清理函數(shù)); ...文件操作... pthread_cleanup_pop(1);pthread_cleanup_push(IO清理函數(shù)); ...IO操作... pthread_cleanup_pop(1);

pop的位置

例子:在本例中,return和pthread_exit效果一樣。

void* func_one(void* ptr) {pthread_cleanup_push(exit_foo, (void*)(long)1);pthread_cleanup_push(exit_foo, (void*)(long)2);// 一、 // pthread_exit((void*)(long)5);pthread_cleanup_pop(0);pthread_cleanup_pop(1);// 二、pthread_exit((void*)(long)10); }// ------------------------------- // 一、 [root@localhost coding]# make run ./test thread cleanup 2 thread cleanup 1 5 // 二、 [root@localhost coding]# make run g++ -g -o test test.cpp -lpthread ./test thread cleanup 1 10

將pthread_exit放在pthread_cleanup_pop之前,所有的清理函數(shù)都會(huì)執(zhí)行,無(wú)論是否傳入?yún)?shù)0。(是否可以理解為“還沒(méi)有讀到pthread_cleanup_pop的具體設(shè)置,線程就退出了,所以默認(rèn)都彈出并執(zhí)行”)

**pthread_cancel同理!**如果一個(gè)子線程在執(zhí)行到pthread_cleanup_pop之前就被其它線程cancel,也會(huì)執(zhí)行所有的清理函數(shù),而不管具體的pop設(shè)置。

pthread_detach

可以讓線程函數(shù)自己調(diào)用pthread_detach(pthread_self()),或是由別的線程調(diào)用pthread_detach(tid)。

int pthread_detach(pthread_t tid);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

讓ID為tid的線程處于分離狀態(tài),不能再用pthread_join對(duì)其進(jìn)行等待。

對(duì)分離狀態(tài)的線程調(diào)用pthread_join不會(huì)阻塞調(diào)用函數(shù)的線程,且pthread_join接收的數(shù)據(jù)沒(méi)有意義。

目前只知道會(huì)對(duì)pthread_join有影響。cancel和push/pop無(wú)影響。

----------------------------

除了對(duì)應(yīng)的init函數(shù),似乎所有鎖都能用一個(gè)PTHREAD_XXX_INITIALIZER變量進(jìn)行賦值來(lái)完成初始化。

pthread_mutex_init/destroy

PTHREAD_MUTEX_INITIALIZER可對(duì)靜態(tài)分配的互斥鎖(或作為全局變量的互斥鎖)進(jìn)行初始化。

// 2個(gè)參數(shù) int pthread_mutex_init(pthread_mutex_t* restrict mutex, const pthread_mutexattr_t* restrict attr);int pthread_mutex_destroy(pthread_mutex_t* restrict mutex);2個(gè)函數(shù)的返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

將attr設(shè)為NULL,可使用默認(rèn)的初始化互斥量。

pthread_mutex_lock/trylock/unlock

int pthread_mutex_lock(pthread_mutex_t* mutex);int pthread_mutex_trylock(pthread_mutex_t* mutex);int pthread_mutex_unlock(pthread_mutex_t* mutex);3個(gè)函數(shù)的返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

使用pthread_mutex_lock對(duì)互斥量上鎖,如果互斥量已經(jīng)上鎖,調(diào)用pthread_mutex_lock的函數(shù)會(huì)被阻塞,直到互斥量被解鎖。

pthread_mutex_unlock解鎖互斥量。

如果不希望線程被阻塞,可以使用pthread_mutex_trylock嘗試對(duì)互斥量加鎖。如果互斥量可用,加鎖;否則返回EBUSY

pthread_mutex_timedlock

tsptr使用的是絕對(duì)時(shí)間:1970年1月1日以來(lái)經(jīng)過(guò)的秒數(shù)。

int pthread_mutex_timedlock(pthread_mutex_t* restrict mutex, const struct timespec* restrict tsptr);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

功能與pthread_mutex_lock基本等價(jià),但到達(dá)超時(shí)時(shí)間時(shí),會(huì)返回錯(cuò)誤碼ETIMEDOUT。即這個(gè)函數(shù)愿意阻塞等待X秒。

tsptr:timespec結(jié)構(gòu),2個(gè)成員:time_t tv_sec、long tv_nsec分別表示s和ns。

1*109ns= 1s 。

獲取時(shí)間參數(shù)的例子

struct timespec tout; clock_gettime(CLOCK_REALTIME, &tout); tout.tv_sec += 10; pthread_mutex_timedlock(&lock, &tout);

pthread_rwlock_init/destroy

PTHREAD_RWLOCK_INITIALIZER可對(duì)靜態(tài)分配的讀寫鎖(或作為全局變量的讀寫鎖)進(jìn)行初始化。

// 2個(gè)參數(shù) int pthread_rwlock_init(pthread_rwlock_t* restrict rwlock, const pthread_rwlockattr_t* restrict attr);int pthread_rwlock_destroy(pthread_rwlock_t* rwlock);2個(gè)函數(shù)的返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

只有當(dāng)讀狀態(tài)的鎖的使用頻率遠(yuǎn)高于寫狀態(tài)的鎖的使用頻率,使用讀寫鎖才可以改善性能。

pthread_rwlock_rdlock/wrlock/unlock

int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock);int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock);int pthread_rwlock_unlock(pthread_rwlock_t* rwlock);3個(gè)函數(shù)的返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

pthread_rwlock_rdlock:在模式下鎖定讀寫鎖。

pthread_rwlock_wrlock:在模式下鎖定讀寫鎖。

pthread_rwlock_unlock:2種模式的讀寫鎖都能解鎖。

pthread_rwlock_tryrdlock/trywrlock

int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwlock);int pthread_rwlock_trywrlock(pthread_rwlock_t* rwlock);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

可以獲得鎖,加鎖,返回0;否則返回EBUSY

pthread_rwlock_timedrdlock/timedwrlock

int pthread_rwlock_timedrdlock(pthread_rwlock_t* restrict rwlock, const struct timespec* restrict tsptr);int pthread_rwlock_timedwrlock(pthread_rwlock_t* restrict rwlock, const struct timespec* restrict tsptr);返回值:成功——0;失敗——錯(cuò)誤編號(hào)。

超時(shí)到期都返回ETIMEDOUT。都使用絕對(duì)時(shí)間。

總結(jié)

以上是生活随笔為你收集整理的【笔记整理 - 多线程编程】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

蜜臀av在线播放 久久综合激激的五月天 | 男女作爱免费网站 | 人人妻人人澡人人爽欧美精品 | 久久久久成人精品免费播放动漫 | 一二三四社区在线中文视频 | 老司机亚洲精品影院无码 | 波多野结衣av在线观看 | 岛国片人妻三上悠亚 | 欧美丰满少妇xxxx性 | 无码人妻精品一区二区三区下载 | 1000部啪啪未满十八勿入下载 | 欧美人与牲动交xxxx | 狠狠色丁香久久婷婷综合五月 | 一本久久伊人热热精品中文字幕 | 国产精华av午夜在线观看 | 亚洲国产精华液网站w | 日本乱偷人妻中文字幕 | 精品国产福利一区二区 | 蜜桃无码一区二区三区 | 人妻尝试又大又粗久久 | 亚洲乱码中文字幕在线 | 亚洲国产精品成人久久蜜臀 | 在线亚洲高清揄拍自拍一品区 | 俺去俺来也在线www色官网 | 在线观看免费人成视频 | 久久亚洲日韩精品一区二区三区 | 午夜理论片yy44880影院 | 色婷婷综合中文久久一本 | 天下第一社区视频www日本 | 中文字幕乱码中文乱码51精品 | 久久人人爽人人爽人人片ⅴ | 日本一区二区三区免费播放 | 男女猛烈xx00免费视频试看 | 日本大乳高潮视频在线观看 | 欧美性生交活xxxxxdddd | 色婷婷久久一区二区三区麻豆 | 国产精品人人妻人人爽 | 一本久久a久久精品vr综合 | 国产精品国产自线拍免费软件 | 少妇无码av无码专区在线观看 | 99久久亚洲精品无码毛片 | 麻豆国产人妻欲求不满谁演的 | 久久亚洲精品中文字幕无男同 | 国产亚洲视频中文字幕97精品 | 日本乱人伦片中文三区 | 久久午夜夜伦鲁鲁片无码免费 | 欧美亚洲国产一区二区三区 | 领导边摸边吃奶边做爽在线观看 | 亚洲熟妇自偷自拍另类 | 色五月丁香五月综合五月 | 高清无码午夜福利视频 | 久久久中文字幕日本无吗 | 国产超碰人人爽人人做人人添 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 欧美乱妇无乱码大黄a片 | 国内精品久久毛片一区二区 | 国产免费久久久久久无码 | 欧美 日韩 人妻 高清 中文 | 日韩精品久久久肉伦网站 | 成人一在线视频日韩国产 | 亚洲国产av精品一区二区蜜芽 | 无码人妻丰满熟妇区毛片18 | 好男人社区资源 | 精品无码一区二区三区爱欲 | 久久国产精品偷任你爽任你 | 久久精品中文字幕大胸 | 国内少妇偷人精品视频 | 一二三四社区在线中文视频 | 亚洲欧洲日本无在线码 | 亚洲欧美综合区丁香五月小说 | 爱做久久久久久 | 亚洲天堂2017无码中文 | 亚洲色偷偷偷综合网 | 高中生自慰www网站 | 国产精品多人p群无码 | 兔费看少妇性l交大片免费 | 亚洲成av人影院在线观看 | 麻豆精品国产精华精华液好用吗 | 丝袜 中出 制服 人妻 美腿 | 国产综合色产在线精品 | 国产精品毛多多水多 | 性做久久久久久久久 | 国产乱人伦偷精品视频 | 亚洲精品欧美二区三区中文字幕 | 国产成人无码区免费内射一片色欲 | 荫蒂添的好舒服视频囗交 | 在线视频网站www色 | 国产亚洲日韩欧美另类第八页 | 性生交大片免费看女人按摩摩 | 午夜无码人妻av大片色欲 | 人妻插b视频一区二区三区 | 成人影院yy111111在线观看 | 99久久久无码国产精品免费 | 久久精品女人的天堂av | 国产明星裸体无码xxxx视频 | 国产精品毛片一区二区 | 熟女少妇在线视频播放 | 色综合天天综合狠狠爱 | 欧美高清在线精品一区 | 国内精品久久久久久中文字幕 | 欧美 日韩 亚洲 在线 | 99精品国产综合久久久久五月天 | 久久精品中文闷骚内射 | 日韩在线不卡免费视频一区 | aⅴ亚洲 日韩 色 图网站 播放 | 青青久在线视频免费观看 | 高潮毛片无遮挡高清免费 | 久久午夜夜伦鲁鲁片无码免费 | 无码国模国产在线观看 | 亚洲自偷精品视频自拍 | 曰韩无码二三区中文字幕 | 精品乱子伦一区二区三区 | 天天拍夜夜添久久精品 | 精品乱码久久久久久久 | 国产又粗又硬又大爽黄老大爷视 | 99在线 | 亚洲 | 国产精品人人妻人人爽 | 亚洲精品成a人在线观看 | 国产精品内射视频免费 | 亚洲国产成人a精品不卡在线 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 55夜色66夜色国产精品视频 | 中文无码精品a∨在线观看不卡 | 少妇厨房愉情理9仑片视频 | 人人超人人超碰超国产 | 少妇人妻av毛片在线看 | 中国女人内谢69xxxxxa片 | 久久综合给久久狠狠97色 | 18黄暴禁片在线观看 | 奇米影视888欧美在线观看 | 久久国产精品偷任你爽任你 | 国产综合色产在线精品 | 亲嘴扒胸摸屁股激烈网站 | 草草网站影院白丝内射 | 四虎国产精品免费久久 | 亚洲国产综合无码一区 | 在线精品国产一区二区三区 | 国产超级va在线观看视频 | 精品国产福利一区二区 | 九九久久精品国产免费看小说 | 无码人妻精品一区二区三区下载 | 日本精品高清一区二区 | 国产无套粉嫩白浆在线 | 高潮毛片无遮挡高清免费 | 在线精品国产一区二区三区 | 麻豆国产97在线 | 欧洲 | 亚洲欧美色中文字幕在线 | 色婷婷综合中文久久一本 | 精品无码av一区二区三区 | 国产av剧情md精品麻豆 | 久久97精品久久久久久久不卡 | 国产精品理论片在线观看 | 嫩b人妻精品一区二区三区 | 无码精品国产va在线观看dvd | 国产成人一区二区三区在线观看 | 99riav国产精品视频 | 无码帝国www无码专区色综合 | 欧美日韩人成综合在线播放 | 午夜理论片yy44880影院 | 熟女少妇在线视频播放 | 美女扒开屁股让男人桶 | 在线观看国产一区二区三区 | 日日夜夜撸啊撸 | 欧美大屁股xxxxhd黑色 | 99久久精品无码一区二区毛片 | 国产成人一区二区三区别 | 水蜜桃色314在线观看 | 久久综合给合久久狠狠狠97色 | www国产亚洲精品久久网站 | 无码av岛国片在线播放 | 一本大道久久东京热无码av | 99久久久无码国产aaa精品 | 亚洲成a人片在线观看无码 | 无码成人精品区在线观看 | 亚洲色成人中文字幕网站 | 性欧美疯狂xxxxbbbb | 欧美丰满熟妇xxxx | aⅴ亚洲 日韩 色 图网站 播放 | www国产精品内射老师 | 永久免费精品精品永久-夜色 | 少妇被粗大的猛进出69影院 | 成年女人永久免费看片 | 东京热一精品无码av | 亚洲中文字幕va福利 | 亚洲一区二区三区四区 | 精品无码国产自产拍在线观看蜜 | 国产人妻久久精品二区三区老狼 | 国产精品久久福利网站 | 国产午夜亚洲精品不卡 | 鲁大师影院在线观看 | 欧美性黑人极品hd | 无码成人精品区在线观看 | 精品人妻人人做人人爽夜夜爽 | 免费国产成人高清在线观看网站 | 水蜜桃av无码 | 久久精品视频在线看15 | 亚洲熟妇自偷自拍另类 | 色一情一乱一伦 | 无码人妻丰满熟妇区五十路百度 | 国产精品福利视频导航 | 欧美日韩一区二区三区自拍 | 图片小说视频一区二区 | 国产av一区二区三区最新精品 | aⅴ在线视频男人的天堂 | 激情爆乳一区二区三区 | 精品久久久中文字幕人妻 | 精品国产一区二区三区四区 | 天堂一区人妻无码 | 国产黑色丝袜在线播放 | 中文字幕无码免费久久9一区9 | 国产精品毛片一区二区 | 久久无码中文字幕免费影院蜜桃 | 精品一区二区三区无码免费视频 | 婷婷五月综合缴情在线视频 | 亚洲色成人中文字幕网站 | 欧美日韩综合一区二区三区 | 天天摸天天透天天添 | 亚洲经典千人经典日产 | 欧美性生交活xxxxxdddd | 久久精品国产日本波多野结衣 | 国产一区二区三区精品视频 | 午夜福利试看120秒体验区 | 波多野结衣乳巨码无在线观看 | 99精品无人区乱码1区2区3区 | 色综合天天综合狠狠爱 | av无码久久久久不卡免费网站 | 免费无码午夜福利片69 | 精品国产乱码久久久久乱码 | 亚洲色欲色欲天天天www | 欧美日韩在线亚洲综合国产人 | 国产精品久久久久无码av色戒 | 激情五月综合色婷婷一区二区 | 欧美大屁股xxxxhd黑色 | 久久精品丝袜高跟鞋 | 沈阳熟女露脸对白视频 | 久久亚洲日韩精品一区二区三区 | 少妇一晚三次一区二区三区 | 国产亚洲人成a在线v网站 | 人人爽人人澡人人高潮 | 国产农村妇女高潮大叫 | 亚洲天堂2017无码中文 | 中文字幕乱码人妻二区三区 | 亚洲精品无码人妻无码 | 午夜精品久久久内射近拍高清 | а√天堂www在线天堂小说 | 国产亚洲精品久久久久久国模美 | 婷婷五月综合激情中文字幕 | 久久综合香蕉国产蜜臀av | 自拍偷自拍亚洲精品10p | 成年女人永久免费看片 | 无码任你躁久久久久久久 | 无码av最新清无码专区吞精 | 蜜臀aⅴ国产精品久久久国产老师 | 日日摸天天摸爽爽狠狠97 | 成在人线av无码免费 | 精品国产麻豆免费人成网站 | 妺妺窝人体色www在线小说 | 国产精品亚洲专区无码不卡 | 亚洲色在线无码国产精品不卡 | 给我免费的视频在线观看 | 国产av无码专区亚洲a∨毛片 | 日本精品久久久久中文字幕 | 国产亚洲美女精品久久久2020 | 色欲综合久久中文字幕网 | 中国女人内谢69xxxx | 强伦人妻一区二区三区视频18 | 精品一区二区不卡无码av | 中文字幕人妻丝袜二区 | 国产成人综合在线女婷五月99播放 | 日本爽爽爽爽爽爽在线观看免 | 青青青手机频在线观看 | 乌克兰少妇性做爰 | 国产人妻精品一区二区三区 | 久久久久se色偷偷亚洲精品av | 无码av最新清无码专区吞精 | 精品欧美一区二区三区久久久 | 亚洲精品一区二区三区在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产香蕉97碰碰久久人人 | 国产精品a成v人在线播放 | √8天堂资源地址中文在线 | 丰腴饱满的极品熟妇 | 日韩精品无码免费一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 中文字幕无线码 | 国产办公室秘书无码精品99 | 中文字幕 人妻熟女 | 亚洲中文字幕av在天堂 | 成人亚洲精品久久久久软件 | 国产va免费精品观看 | av无码不卡在线观看免费 | √8天堂资源地址中文在线 | 99精品无人区乱码1区2区3区 | 99久久精品午夜一区二区 | 国产午夜亚洲精品不卡下载 | 最新国产麻豆aⅴ精品无码 | 久久久久久久久蜜桃 | 国产又粗又硬又大爽黄老大爷视 | 国产片av国语在线观看 | 国产亚洲精品久久久久久国模美 | 久久久久久亚洲精品a片成人 | 一本色道久久综合狠狠躁 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲精品国产精品乱码不卡 | 国产激情无码一区二区app | 扒开双腿吃奶呻吟做受视频 | 久久精品国产精品国产精品污 | 亚拍精品一区二区三区探花 | 人妻aⅴ无码一区二区三区 | 2020最新国产自产精品 | 国产肉丝袜在线观看 | 成人无码精品1区2区3区免费看 | 蜜臀aⅴ国产精品久久久国产老师 | 国产卡一卡二卡三 | 国精产品一区二区三区 | 无码人妻黑人中文字幕 | 国产午夜亚洲精品不卡下载 | 色婷婷久久一区二区三区麻豆 | 欧美真人作爱免费视频 | 欧美国产日韩久久mv | 无码国产色欲xxxxx视频 | 乱人伦人妻中文字幕无码 | 无码一区二区三区在线 | 午夜无码区在线观看 | 精品久久久中文字幕人妻 | 婷婷丁香五月天综合东京热 | 中文字幕无线码 | 又大又硬又黄的免费视频 | 精品少妇爆乳无码av无码专区 | 综合激情五月综合激情五月激情1 | 国产内射爽爽大片视频社区在线 | 久久久精品欧美一区二区免费 | 国产色在线 | 国产 | 婷婷丁香六月激情综合啪 | 免费视频欧美无人区码 | 久久aⅴ免费观看 | 久久久久亚洲精品中文字幕 | 亚洲日韩中文字幕在线播放 | 欧美人与动性行为视频 | 亚洲国产精华液网站w | 无码一区二区三区在线 | 在线观看国产午夜福利片 | 红桃av一区二区三区在线无码av | 国产成人无码a区在线观看视频app | 久在线观看福利视频 | 欧美丰满熟妇xxxx性ppx人交 | 色妞www精品免费视频 | 中文字幕av无码一区二区三区电影 | 荫蒂添的好舒服视频囗交 | 国产成人无码一二三区视频 | 一本色道婷婷久久欧美 | 国产又粗又硬又大爽黄老大爷视 | av人摸人人人澡人人超碰下载 | 亚洲一区二区三区含羞草 | 奇米影视7777久久精品人人爽 | 精品夜夜澡人妻无码av蜜桃 | 亚洲欧美精品aaaaaa片 | 国产av人人夜夜澡人人爽麻豆 | 人妻夜夜爽天天爽三区 | 娇妻被黑人粗大高潮白浆 | 亚洲日韩av片在线观看 | 国产精品久久久久无码av色戒 | 无码人妻黑人中文字幕 | 妺妺窝人体色www在线小说 | 一区二区三区乱码在线 | 欧洲 | 给我免费的视频在线观看 | 任你躁国产自任一区二区三区 | 中国大陆精品视频xxxx | 人人妻人人澡人人爽精品欧美 | 亚洲の无码国产の无码步美 | 国产成人综合在线女婷五月99播放 | 亚洲另类伦春色综合小说 | 亚洲日韩一区二区 | 亚洲综合另类小说色区 | 无码帝国www无码专区色综合 | 午夜熟女插插xx免费视频 | 国产人妻精品一区二区三区 | 无码国产乱人伦偷精品视频 | 人妻插b视频一区二区三区 | 任你躁国产自任一区二区三区 | 欧美肥老太牲交大战 | 中文字幕无码乱人伦 | 国产午夜亚洲精品不卡下载 | 精品国产成人一区二区三区 | 欧美人与物videos另类 | 蜜桃无码一区二区三区 | 动漫av一区二区在线观看 | 精品无人区无码乱码毛片国产 | 午夜性刺激在线视频免费 | 人人妻人人澡人人爽欧美精品 | 日韩人妻系列无码专区 | 亚洲 激情 小说 另类 欧美 | 国产国语老龄妇女a片 | 人人妻人人澡人人爽人人精品浪潮 | 亲嘴扒胸摸屁股激烈网站 | 欧美精品在线观看 | 国产尤物精品视频 | 青草青草久热国产精品 | 波多野结衣乳巨码无在线观看 | 精品国产一区二区三区四区 | 欧美三级a做爰在线观看 | 久久久久成人精品免费播放动漫 | 亚洲一区二区三区含羞草 | 人人澡人摸人人添 | 国产另类ts人妖一区二区 | 青青青手机频在线观看 | 中文字幕日产无线码一区 | 国内丰满熟女出轨videos | 最近的中文字幕在线看视频 | 无码国内精品人妻少妇 | 欧美日韩一区二区免费视频 | 久久久久久亚洲精品a片成人 | 色欲人妻aaaaaaa无码 | a在线观看免费网站大全 | 日产精品99久久久久久 | 国产精品人妻一区二区三区四 | 亚洲精品美女久久久久久久 | 三级4级全黄60分钟 | av在线亚洲欧洲日产一区二区 | 国产精品a成v人在线播放 | 亚洲人交乣女bbw | 精品国精品国产自在久国产87 | 少妇激情av一区二区 | 国产内射爽爽大片视频社区在线 | 给我免费的视频在线观看 | 久久久国产精品无码免费专区 | 熟女体下毛毛黑森林 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品鲁一鲁一区二区三区 | 日韩亚洲欧美中文高清在线 | 国精产品一区二区三区 | 亚洲成a人片在线观看无码 | 在教室伦流澡到高潮hnp视频 | 国色天香社区在线视频 | 秋霞特色aa大片 | 久久综合香蕉国产蜜臀av | 国产疯狂伦交大片 | 黑人粗大猛烈进出高潮视频 | 无码吃奶揉捏奶头高潮视频 | 无码人妻黑人中文字幕 | 国产一区二区不卡老阿姨 | 国产人妻精品一区二区三区 | 国产亚洲视频中文字幕97精品 | 日本熟妇人妻xxxxx人hd | 亚洲乱码中文字幕在线 | 高潮喷水的毛片 | www国产亚洲精品久久久日本 | 久久久久久久人妻无码中文字幕爆 | 久久精品人妻少妇一区二区三区 | 欧洲vodafone精品性 | 久久综合给久久狠狠97色 | 老熟妇乱子伦牲交视频 | 无码中文字幕色专区 | 蜜桃视频韩日免费播放 | av在线亚洲欧洲日产一区二区 | 精品国产av色一区二区深夜久久 | 亚洲成a人一区二区三区 | 欧美日韩综合一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 无码人妻精品一区二区三区不卡 | 婷婷丁香六月激情综合啪 | 精品少妇爆乳无码av无码专区 | 无套内谢老熟女 | 国产精品无码一区二区三区不卡 | 久久精品人人做人人综合 | 亚洲国产精品久久人人爱 | 国产一区二区三区精品视频 | 国精产品一区二区三区 | 在线欧美精品一区二区三区 | 国产亚洲日韩欧美另类第八页 | 丰满少妇弄高潮了www | 亚洲色偷偷偷综合网 | 蜜桃av抽搐高潮一区二区 | 国产成人精品必看 | 毛片内射-百度 | 少妇邻居内射在线 | 久激情内射婷内射蜜桃人妖 | 精品午夜福利在线观看 | 国产97在线 | 亚洲 | 欧美日本日韩 | 老子影院午夜精品无码 | 97精品人妻一区二区三区香蕉 | 亚洲 欧美 激情 小说 另类 | 四虎国产精品一区二区 | 国产成人无码午夜视频在线观看 | 色情久久久av熟女人妻网站 | 午夜精品久久久久久久久 | 丰满人妻一区二区三区免费视频 | 免费国产成人高清在线观看网站 | 久久99精品久久久久久动态图 | 久久久精品人妻久久影视 | 国产成人精品无码播放 | 99久久精品日本一区二区免费 | 国产小呦泬泬99精品 | 中文无码精品a∨在线观看不卡 | 日本精品少妇一区二区三区 | 精品国产aⅴ无码一区二区 | 成人一在线视频日韩国产 | 国产乱人伦偷精品视频 | 国产办公室秘书无码精品99 | 午夜精品久久久内射近拍高清 | 亚洲自偷自拍另类第1页 | 亚洲阿v天堂在线 | 久久国产劲爆∧v内射 | 亚洲精品综合一区二区三区在线 | 亚洲日本一区二区三区在线 | 蜜臀av无码人妻精品 | 久久成人a毛片免费观看网站 | 精品欧洲av无码一区二区三区 | 一本精品99久久精品77 | 久久精品丝袜高跟鞋 | 18精品久久久无码午夜福利 | 国产精品永久免费视频 | 中文字幕人妻丝袜二区 | 国产av一区二区精品久久凹凸 | 久久精品中文字幕一区 | 亚洲а∨天堂久久精品2021 | 国产精品沙发午睡系列 | 熟妇人妻无码xxx视频 | 99视频精品全部免费免费观看 | 国产精品18久久久久久麻辣 | 免费观看激色视频网站 | 国产特级毛片aaaaaa高潮流水 | 国产又粗又硬又大爽黄老大爷视 | 亚洲理论电影在线观看 | 强开小婷嫩苞又嫩又紧视频 | 精品欧美一区二区三区久久久 | 免费无码一区二区三区蜜桃大 | 天堂无码人妻精品一区二区三区 | 亚洲精品午夜国产va久久成人 | 少妇无套内谢久久久久 | www一区二区www免费 | 少妇激情av一区二区 | 国产成人精品视频ⅴa片软件竹菊 | 精品国产麻豆免费人成网站 | 亚洲人成人无码网www国产 | 97夜夜澡人人爽人人喊中国片 | 少女韩国电视剧在线观看完整 | 国产成人精品久久亚洲高清不卡 | 国产真实乱对白精彩久久 | 精品无码一区二区三区爱欲 | 国产精品欧美成人 | 精品少妇爆乳无码av无码专区 | 亚洲精品久久久久中文第一幕 | 午夜性刺激在线视频免费 | 国产国语老龄妇女a片 | 中文字幕av伊人av无码av | 天堂在线观看www | 国产高潮视频在线观看 | 亚洲精品午夜无码电影网 | 2020久久香蕉国产线看观看 | 狂野欧美性猛xxxx乱大交 | 日本一卡二卡不卡视频查询 | 国产精品a成v人在线播放 | 97精品国产97久久久久久免费 | 成人片黄网站色大片免费观看 | 图片小说视频一区二区 | 西西人体www44rt大胆高清 | 精品水蜜桃久久久久久久 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产精品人人妻人人爽 | 国产乱码精品一品二品 | 亚洲人成影院在线无码按摩店 | 久热国产vs视频在线观看 | 久久久www成人免费毛片 | 人妻无码αv中文字幕久久琪琪布 | 免费看男女做好爽好硬视频 | 久久久无码中文字幕久... | 丰满人妻翻云覆雨呻吟视频 | 国产成人久久精品流白浆 | 精品国产麻豆免费人成网站 | 免费播放一区二区三区 | 久久国产自偷自偷免费一区调 | 西西人体www44rt大胆高清 | 国产精品资源一区二区 | 日韩人妻无码中文字幕视频 | 又粗又大又硬毛片免费看 | 男女爱爱好爽视频免费看 | 综合人妻久久一区二区精品 | 国产电影无码午夜在线播放 | 亚洲另类伦春色综合小说 | 日日摸夜夜摸狠狠摸婷婷 | 国产亚洲精品久久久久久国模美 | 久久久久99精品国产片 | 人妻体内射精一区二区三四 | 无套内谢的新婚少妇国语播放 | 未满成年国产在线观看 | 国产黑色丝袜在线播放 | 97久久超碰中文字幕 | 性欧美牲交在线视频 | 国产sm调教视频在线观看 | 国产精品办公室沙发 | 88国产精品欧美一区二区三区 | 中文字幕乱码中文乱码51精品 | 性生交大片免费看l | 欧美人与善在线com | 国产午夜福利亚洲第一 | 中文字幕 亚洲精品 第1页 | 成人精品视频一区二区 | 成人免费视频视频在线观看 免费 | 久久精品99久久香蕉国产色戒 | 午夜无码区在线观看 | 97久久超碰中文字幕 | 国精产品一品二品国精品69xx | 精品夜夜澡人妻无码av蜜桃 | 98国产精品综合一区二区三区 | 人人妻人人澡人人爽欧美一区九九 | 俺去俺来也www色官网 | 无码人妻精品一区二区三区下载 | 亚洲伊人久久精品影院 | 国产美女极度色诱视频www | 国产精品免费大片 | 国产精品无码久久av | 又湿又紧又大又爽a视频国产 | 男人扒开女人内裤强吻桶进去 | 奇米影视888欧美在线观看 | 又紧又大又爽精品一区二区 | 领导边摸边吃奶边做爽在线观看 | 国产农村乱对白刺激视频 | 国产欧美精品一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 亚洲码国产精品高潮在线 | 日韩精品无码一本二本三本色 | 天堂无码人妻精品一区二区三区 | 亚洲欧美日韩综合久久久 | 久久久久国色av免费观看性色 | 麻花豆传媒剧国产免费mv在线 | 理论片87福利理论电影 | 国产真实乱对白精彩久久 | 欧洲欧美人成视频在线 | 亚洲成色在线综合网站 | 精品国产aⅴ无码一区二区 | 国产偷自视频区视频 | 国产成人无码av片在线观看不卡 | 高清不卡一区二区三区 | 亚洲精品午夜无码电影网 | 4hu四虎永久在线观看 | 欧美激情内射喷水高潮 | 永久免费观看美女裸体的网站 | 国产精品二区一区二区aⅴ污介绍 | 国产精品va在线观看无码 | 国产人妻久久精品二区三区老狼 | 少妇久久久久久人妻无码 | 精品偷拍一区二区三区在线看 | 爽爽影院免费观看 | 东京热无码av男人的天堂 | 国产内射老熟女aaaa | 精品久久久无码中文字幕 | 日本成熟视频免费视频 | 午夜肉伦伦影院 | 国产偷抇久久精品a片69 | 高清国产亚洲精品自在久久 | 国产区女主播在线观看 | 久久久无码中文字幕久... | 国内精品九九久久久精品 | 久久人妻内射无码一区三区 | 亚洲gv猛男gv无码男同 | 国精产品一区二区三区 | 国产精品毛多多水多 | 国产在线一区二区三区四区五区 | 人人妻人人澡人人爽欧美一区九九 | 日本饥渴人妻欲求不满 | 成熟女人特级毛片www免费 | 人妻无码αv中文字幕久久琪琪布 | 成人av无码一区二区三区 | 日本va欧美va欧美va精品 | 熟女俱乐部五十路六十路av | 亚洲日韩乱码中文无码蜜桃臀网站 | 色欲综合久久中文字幕网 | 国产suv精品一区二区五 | 国内精品九九久久久精品 | 久久精品无码一区二区三区 | 午夜无码人妻av大片色欲 | 九九热爱视频精品 | 亚洲gv猛男gv无码男同 | 在线a亚洲视频播放在线观看 | 无套内射视频囯产 | 天堂亚洲2017在线观看 | 西西人体www44rt大胆高清 | 成人无码影片精品久久久 | 日日噜噜噜噜夜夜爽亚洲精品 | 青草青草久热国产精品 | 成人精品天堂一区二区三区 | 伦伦影院午夜理论片 | 性欧美牲交在线视频 | 天天摸天天碰天天添 | 久久久精品人妻久久影视 | 日本熟妇大屁股人妻 | 久激情内射婷内射蜜桃人妖 | 久久国产精品萌白酱免费 | 亚洲综合伊人久久大杳蕉 | 午夜不卡av免费 一本久久a久久精品vr综合 | 欧美人与牲动交xxxx | 在线播放免费人成毛片乱码 | 国产另类ts人妖一区二区 | 欧美日本免费一区二区三区 | 精品一区二区不卡无码av | 午夜肉伦伦影院 | 人人澡人人妻人人爽人人蜜桃 | 97久久超碰中文字幕 | 欧美xxxx黑人又粗又长 | 人妻少妇精品久久 | 欧美老熟妇乱xxxxx | 夫妻免费无码v看片 | 亚洲狠狠色丁香婷婷综合 | 少妇愉情理伦片bd | 亚洲国精产品一二二线 | 亚洲爆乳无码专区 | 国产农村妇女高潮大叫 | 成人无码视频在线观看网站 | 日本大乳高潮视频在线观看 | 一本色道久久综合狠狠躁 | 欧美第一黄网免费网站 | 久久久久亚洲精品中文字幕 | 久久亚洲国产成人精品性色 | 伊人色综合久久天天小片 | 亚洲精品综合一区二区三区在线 | 亚洲国产日韩a在线播放 | 国语自产偷拍精品视频偷 | 国产乱人偷精品人妻a片 | 日韩av无码一区二区三区 | 久久久久久国产精品无码下载 | 国产亚洲人成a在线v网站 | 精品厕所偷拍各类美女tp嘘嘘 | 永久免费精品精品永久-夜色 | 日韩在线不卡免费视频一区 | 国产欧美熟妇另类久久久 | 亚洲小说图区综合在线 | 蜜桃av抽搐高潮一区二区 | 亚洲欧美日韩成人高清在线一区 | 乱人伦人妻中文字幕无码久久网 | 亚洲人成影院在线观看 | 国产明星裸体无码xxxx视频 | 麻豆av传媒蜜桃天美传媒 | 人妻人人添人妻人人爱 | 99国产欧美久久久精品 | 好爽又高潮了毛片免费下载 | 精品无人国产偷自产在线 | 粗大的内捧猛烈进出视频 | 日本精品人妻无码免费大全 | 国产一区二区三区四区五区加勒比 | 精品少妇爆乳无码av无码专区 | 日日噜噜噜噜夜夜爽亚洲精品 | 荫蒂添的好舒服视频囗交 | 亚洲啪av永久无码精品放毛片 | 成人欧美一区二区三区 | 76少妇精品导航 | 精品 日韩 国产 欧美 视频 | 亚洲最大成人网站 | 国产高清不卡无码视频 | 日本又色又爽又黄的a片18禁 | 丰满少妇女裸体bbw | 国产另类ts人妖一区二区 | 99久久精品午夜一区二区 | 亚洲乱亚洲乱妇50p | 无码人中文字幕 | 伦伦影院午夜理论片 | 在教室伦流澡到高潮hnp视频 | 国产精品久久国产精品99 | 国产人妻久久精品二区三区老狼 | 成人av无码一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久久久久久女国产乱让韩 | 国产真实乱对白精彩久久 | 亚洲中文字幕久久无码 | 欧美精品在线观看 | 日韩精品无码一区二区中文字幕 | 波多野结衣av一区二区全免费观看 | 亚洲乱码国产乱码精品精 | 狂野欧美性猛交免费视频 | 国产亚洲日韩欧美另类第八页 | 少妇性俱乐部纵欲狂欢电影 | 国产精品人人妻人人爽 | 精品国产麻豆免费人成网站 | 久久人妻内射无码一区三区 | 久久99国产综合精品 | 久久人妻内射无码一区三区 | 88国产精品欧美一区二区三区 | 久久久精品人妻久久影视 | 麻花豆传媒剧国产免费mv在线 | 午夜无码人妻av大片色欲 | 狠狠色色综合网站 | 双乳奶水饱满少妇呻吟 | 精品久久久久久人妻无码中文字幕 | 无码中文字幕色专区 | 亚洲爆乳精品无码一区二区三区 | 欧美老妇交乱视频在线观看 | 日韩视频 中文字幕 视频一区 | 精品无码一区二区三区爱欲 | 亚洲热妇无码av在线播放 | a在线观看免费网站大全 | 在线精品亚洲一区二区 | 久久久av男人的天堂 | 兔费看少妇性l交大片免费 | 国产情侣作爱视频免费观看 | 牲欲强的熟妇农村老妇女视频 | 无人区乱码一区二区三区 | 中文字幕中文有码在线 | 亚洲 激情 小说 另类 欧美 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲精品国产品国语在线观看 | 粗大的内捧猛烈进出视频 | 日韩精品久久久肉伦网站 | 老熟女重囗味hdxx69 | 狠狠色欧美亚洲狠狠色www | 国产成人一区二区三区在线观看 | 国产精品资源一区二区 | 亚洲综合无码久久精品综合 | 久久国产劲爆∧v内射 | 亚洲男人av香蕉爽爽爽爽 | 波多野结衣一区二区三区av免费 | 小sao货水好多真紧h无码视频 | ass日本丰满熟妇pics | 欧美人与动性行为视频 | 在线а√天堂中文官网 | 亚洲国产午夜精品理论片 | 久久精品女人的天堂av | 亚拍精品一区二区三区探花 | 欧洲熟妇色 欧美 | 99视频精品全部免费免费观看 | 丁香花在线影院观看在线播放 | 国产免费久久精品国产传媒 | 内射老妇bbwx0c0ck | 久久精品丝袜高跟鞋 | 国产 精品 自在自线 | 亚洲欧洲无卡二区视頻 | 曰韩少妇内射免费播放 | 成人无码精品1区2区3区免费看 | 精品乱子伦一区二区三区 | 久久久无码中文字幕久... | 日韩精品乱码av一区二区 | 国产成人久久精品流白浆 | 免费看少妇作爱视频 | 在线亚洲高清揄拍自拍一品区 | 亚洲自偷精品视频自拍 | 国产又粗又硬又大爽黄老大爷视 | 久久 国产 尿 小便 嘘嘘 | 成人精品视频一区二区 | 亚洲第一网站男人都懂 | 国产精品久免费的黄网站 | 少妇高潮喷潮久久久影院 | 亚拍精品一区二区三区探花 | 精品国产aⅴ无码一区二区 | 亚洲va欧美va天堂v国产综合 | 亚洲欧洲日本综合aⅴ在线 | 牲交欧美兽交欧美 | 99在线 | 亚洲 | 欧美阿v高清资源不卡在线播放 | 成人精品天堂一区二区三区 | 精品无码一区二区三区爱欲 | 国产超碰人人爽人人做人人添 | 亚洲色www成人永久网址 | 色综合视频一区二区三区 | 亚洲乱码日产精品bd | 亚洲成av人在线观看网址 | 久久人人97超碰a片精品 | 亚洲精品午夜无码电影网 | 中文精品无码中文字幕无码专区 | 真人与拘做受免费视频一 | 人人妻人人澡人人爽欧美一区九九 | 无码人妻丰满熟妇区毛片18 | 一区二区三区乱码在线 | 欧洲 | 国产成人无码av在线影院 | 动漫av一区二区在线观看 | 亚洲国产欧美在线成人 | 日日摸天天摸爽爽狠狠97 | 中文字幕人妻丝袜二区 | 亚洲日本va午夜在线电影 | 精品国产一区二区三区四区 | 呦交小u女精品视频 | 亚洲一区二区三区四区 | 国产人妻人伦精品1国产丝袜 | 成人欧美一区二区三区黑人 | 一本久道久久综合婷婷五月 | 国产人成高清在线视频99最全资源 | 在线成人www免费观看视频 | 久久午夜无码鲁丝片 | 国产绳艺sm调教室论坛 | 国产农村妇女高潮大叫 | 久久久国产精品无码免费专区 | 一本久久伊人热热精品中文字幕 | 精品少妇爆乳无码av无码专区 | 久久国产劲爆∧v内射 | 国产精品永久免费视频 | 久9re热视频这里只有精品 | 国产做国产爱免费视频 | 国产精品高潮呻吟av久久 | 久久国内精品自在自线 | 97久久精品无码一区二区 | 精品国产一区二区三区av 性色 | a在线观看免费网站大全 | 亚洲人成网站在线播放942 | 中文字幕日韩精品一区二区三区 | 亚洲一区二区三区香蕉 | 无码人妻精品一区二区三区不卡 | 亲嘴扒胸摸屁股激烈网站 | 亚洲无人区午夜福利码高清完整版 | 日日摸夜夜摸狠狠摸婷婷 | 波多野结衣av一区二区全免费观看 | yw尤物av无码国产在线观看 | 正在播放东北夫妻内射 | 欧洲美熟女乱又伦 | 国产莉萝无码av在线播放 | 国产成人午夜福利在线播放 | 国产人妻大战黑人第1集 | 欧美熟妇另类久久久久久不卡 | 人妻无码αv中文字幕久久琪琪布 | 乱码av麻豆丝袜熟女系列 | 亚洲精品国产精品乱码不卡 | 婷婷六月久久综合丁香 | 玩弄中年熟妇正在播放 | 国产真人无遮挡作爱免费视频 | 亚洲国产精品无码一区二区三区 | 中国女人内谢69xxxxxa片 | 亚洲乱码日产精品bd | 欧美老妇交乱视频在线观看 | 国产网红无码精品视频 | 亚洲 激情 小说 另类 欧美 | 日韩欧美中文字幕公布 | 亲嘴扒胸摸屁股激烈网站 | 高潮毛片无遮挡高清免费视频 | 大肉大捧一进一出好爽视频 | 无遮挡国产高潮视频免费观看 | 日韩在线不卡免费视频一区 | 欧美真人作爱免费视频 | 久久久久久久人妻无码中文字幕爆 | 人人妻人人澡人人爽人人精品浪潮 | 美女张开腿让人桶 | www成人国产高清内射 | 免费网站看v片在线18禁无码 | 少妇人妻av毛片在线看 | 牲交欧美兽交欧美 | 亚洲日韩一区二区三区 | 国产人妻人伦精品1国产丝袜 | 亚洲精品无码人妻无码 | 中文字幕无码av激情不卡 | 色妞www精品免费视频 | 国产精品毛片一区二区 | 性欧美牲交xxxxx视频 | 欧美一区二区三区视频在线观看 | 西西人体www44rt大胆高清 | 中文精品久久久久人妻不卡 | 日本饥渴人妻欲求不满 | 国产极品美女高潮无套在线观看 | 极品尤物被啪到呻吟喷水 | 蜜桃视频插满18在线观看 | 在线观看国产午夜福利片 | 国产亚洲精品久久久ai换 | 樱花草在线播放免费中文 | 久久久中文字幕日本无吗 | 国产精品高潮呻吟av久久 | 午夜性刺激在线视频免费 | 国产又爽又黄又刺激的视频 | 麻豆md0077饥渴少妇 | 久久综合给久久狠狠97色 | 日本精品高清一区二区 | 人人妻人人藻人人爽欧美一区 | 一本大道伊人av久久综合 | 天天做天天爱天天爽综合网 | 国产在热线精品视频 | 一本色道久久综合狠狠躁 | 曰本女人与公拘交酡免费视频 | 77777熟女视频在线观看 а天堂中文在线官网 | 婷婷五月综合缴情在线视频 | 少妇人妻偷人精品无码视频 | 国产99久久精品一区二区 | 日本丰满熟妇videos | 日本一卡二卡不卡视频查询 | 丰满人妻一区二区三区免费视频 | 人妻互换免费中文字幕 | 无码av免费一区二区三区试看 | 国内揄拍国内精品少妇国语 | 性色av无码免费一区二区三区 | 亚洲の无码国产の无码步美 | 丁香花在线影院观看在线播放 | 亚洲高清偷拍一区二区三区 | 性做久久久久久久免费看 | 日韩人妻无码中文字幕视频 | 欧洲vodafone精品性 | 亚洲s码欧洲m码国产av | 日本一卡2卡3卡四卡精品网站 | 中文精品无码中文字幕无码专区 | 少妇无码av无码专区在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 丰满少妇熟乱xxxxx视频 | 好爽又高潮了毛片免费下载 | 女高中生第一次破苞av | 亚洲日本一区二区三区在线 | 自拍偷自拍亚洲精品10p | 国产精品久久久久久亚洲影视内衣 | 国产一区二区不卡老阿姨 | 国产香蕉97碰碰久久人人 | ass日本丰满熟妇pics | 少妇的肉体aa片免费 | 国产在线精品一区二区高清不卡 | 国产av久久久久精东av | 亚洲精品一区二区三区大桥未久 | 国产精品无码永久免费888 | 无码国模国产在线观看 | 欧美激情综合亚洲一二区 | 中文字幕乱码人妻二区三区 | 国产69精品久久久久app下载 | 精品偷自拍另类在线观看 | 福利一区二区三区视频在线观看 | 国产 浪潮av性色四虎 | 又紧又大又爽精品一区二区 | av人摸人人人澡人人超碰下载 | 免费无码的av片在线观看 | 欧美zoozzooz性欧美 | 俺去俺来也www色官网 | 色欲综合久久中文字幕网 | 久久综合九色综合97网 | 亚洲综合无码久久精品综合 | 亚洲精品成a人在线观看 | 好男人社区资源 | 伊人色综合久久天天小片 | 国产精品无码成人午夜电影 | 欧美成人家庭影院 | 国产午夜无码视频在线观看 | 国产精品国产三级国产专播 | 国产人妻久久精品二区三区老狼 | 日本一区二区更新不卡 | 亚洲乱码中文字幕在线 | 丰满肥臀大屁股熟妇激情视频 | 久久人人爽人人人人片 | 亚洲日本va中文字幕 | 野外少妇愉情中文字幕 | 黄网在线观看免费网站 | 蜜臀av在线播放 久久综合激激的五月天 | 成人欧美一区二区三区黑人免费 | 天天拍夜夜添久久精品大 | 在线精品亚洲一区二区 | 一区二区传媒有限公司 | 亚洲 另类 在线 欧美 制服 | 亚洲色欲久久久综合网东京热 | 国产真人无遮挡作爱免费视频 | 亚洲爆乳精品无码一区二区三区 | 精品国产av色一区二区深夜久久 | www国产亚洲精品久久网站 | 国产小呦泬泬99精品 | 爆乳一区二区三区无码 | 国产性生大片免费观看性 | 丰满护士巨好爽好大乳 | 性开放的女人aaa片 | 久久人人97超碰a片精品 | 亚洲爆乳大丰满无码专区 | 人妻少妇精品无码专区二区 | 国产99久久精品一区二区 | 成人欧美一区二区三区 | 少妇人妻av毛片在线看 | 欧美日本精品一区二区三区 | 娇妻被黑人粗大高潮白浆 | 亚洲成熟女人毛毛耸耸多 | 国产日产欧产精品精品app | 久久熟妇人妻午夜寂寞影院 | 亚洲а∨天堂久久精品2021 | 欧美阿v高清资源不卡在线播放 | 国产性生大片免费观看性 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲日韩av片在线观看 | 国产三级久久久精品麻豆三级 | 精品欧美一区二区三区久久久 | 一本久久伊人热热精品中文字幕 | 亚洲精品成a人在线观看 | 久久zyz资源站无码中文动漫 | 亚洲欧美国产精品专区久久 | 亚洲国产精品一区二区美利坚 | 亚洲日韩一区二区三区 | 精品日本一区二区三区在线观看 | 亚洲 日韩 欧美 成人 在线观看 | 国产精品va在线播放 | 狂野欧美性猛交免费视频 | 无码国产乱人伦偷精品视频 | 色综合久久久无码网中文 | 老司机亚洲精品影院 | 无码一区二区三区在线观看 | 久久久国产精品无码免费专区 | 东京热男人av天堂 | 国产精品资源一区二区 | 无码av中文字幕免费放 | 免费无码午夜福利片69 | 欧美35页视频在线观看 | 2020久久香蕉国产线看观看 | 国产两女互慰高潮视频在线观看 | 日韩人妻无码一区二区三区久久99 | 少女韩国电视剧在线观看完整 | 无码av最新清无码专区吞精 | 色婷婷综合激情综在线播放 | av人摸人人人澡人人超碰下载 | 一本久久伊人热热精品中文字幕 | 夜夜高潮次次欢爽av女 | 又紧又大又爽精品一区二区 | 国产av剧情md精品麻豆 | 澳门永久av免费网站 | 免费看男女做好爽好硬视频 | 丰满人妻一区二区三区免费视频 | 动漫av一区二区在线观看 | 丰满肥臀大屁股熟妇激情视频 | 最近免费中文字幕中文高清百度 | 免费人成网站视频在线观看 | 亚洲精品久久久久avwww潮水 | 在线亚洲高清揄拍自拍一品区 | 国产精品丝袜黑色高跟鞋 | 男人和女人高潮免费网站 | 国产特级毛片aaaaaa高潮流水 | 国产熟妇另类久久久久 | 300部国产真实乱 | 国产午夜视频在线观看 | 久久 国产 尿 小便 嘘嘘 | 东京热无码av男人的天堂 | 国内精品久久毛片一区二区 | 亚洲中文字幕久久无码 | 亚洲国产精品美女久久久久 | 日韩精品无码一区二区中文字幕 | 精品久久综合1区2区3区激情 | 精品国产青草久久久久福利 | 人人妻人人澡人人爽人人精品浪潮 | 色婷婷av一区二区三区之红樱桃 | 人妻aⅴ无码一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 国产97色在线 | 免 | 牲欲强的熟妇农村老妇女 | 成人一在线视频日韩国产 | 成年女人永久免费看片 | 亚洲小说图区综合在线 | 丰满少妇熟乱xxxxx视频 | 亚洲中文字幕无码中文字在线 | 色一情一乱一伦一视频免费看 | 嫩b人妻精品一区二区三区 | 午夜精品久久久内射近拍高清 | 天天摸天天碰天天添 | 亚洲精品成人福利网站 | 三上悠亚人妻中文字幕在线 | 亚洲男人av天堂午夜在 | 麻豆果冻传媒2021精品传媒一区下载 | 欧美精品一区二区精品久久 | 内射白嫩少妇超碰 | 国产 精品 自在自线 | 中文字幕乱码中文乱码51精品 | 国产成人无码区免费内射一片色欲 | 性色欲网站人妻丰满中文久久不卡 | 成人欧美一区二区三区 | 久久午夜无码鲁丝片午夜精品 | 国产亚洲人成在线播放 | 精品偷拍一区二区三区在线看 | 亚洲人成网站色7799 | 国产成人无码av在线影院 | 狠狠色噜噜狠狠狠狠7777米奇 | 丰满人妻被黑人猛烈进入 | 国产精品久久久午夜夜伦鲁鲁 | 中文字幕无码热在线视频 | 精品国产麻豆免费人成网站 | 日日碰狠狠丁香久燥 | 亚洲精品国产第一综合99久久 | 无码人妻久久一区二区三区不卡 | 精品久久久久久人妻无码中文字幕 | 精品人人妻人人澡人人爽人人 | 国产真人无遮挡作爱免费视频 | 国产亚洲精品久久久久久久久动漫 | 乌克兰少妇xxxx做受 | 18无码粉嫩小泬无套在线观看 | 人妻少妇精品无码专区动漫 | 18精品久久久无码午夜福利 | 久久久久亚洲精品中文字幕 | 亚洲成在人网站无码天堂 | 国产精品久久福利网站 | 国产精品久久久久久亚洲影视内衣 | 国产精品亚洲一区二区三区喷水 | 捆绑白丝粉色jk震动捧喷白浆 | 狠狠cao日日穞夜夜穞av | 成人aaa片一区国产精品 | 久久aⅴ免费观看 | 国产婷婷色一区二区三区在线 | 人人爽人人爽人人片av亚洲 | 人人妻人人澡人人爽人人精品浪潮 | 久久久精品成人免费观看 | 日韩欧美中文字幕在线三区 | 欧美精品在线观看 | 精品成人av一区二区三区 | 色一情一乱一伦一视频免费看 | 97精品人妻一区二区三区香蕉 | 亚洲国产精品久久久天堂 | 天天躁夜夜躁狠狠是什么心态 | 无码福利日韩神码福利片 | 成人欧美一区二区三区黑人 | 精品少妇爆乳无码av无码专区 | 国产精品久久国产精品99 | 欧美丰满熟妇xxxx | 久久久亚洲欧洲日产国码αv | 久久这里只有精品视频9 | 77777熟女视频在线观看 а天堂中文在线官网 | 国内精品一区二区三区不卡 | 国产午夜亚洲精品不卡 | 国产性生交xxxxx无码 | 亚洲色大成网站www国产 | 午夜不卡av免费 一本久久a久久精品vr综合 | 女人色极品影院 | 亚洲国产av精品一区二区蜜芽 | 天堂а√在线地址中文在线 | 国模大胆一区二区三区 | 老熟妇仑乱视频一区二区 | 55夜色66夜色国产精品视频 | 人妻少妇精品无码专区二区 | 亚洲国产精品毛片av不卡在线 | 精品人人妻人人澡人人爽人人 | 粉嫩少妇内射浓精videos | 一本大道伊人av久久综合 | 性生交大片免费看女人按摩摩 | 日本免费一区二区三区最新 | 日产精品高潮呻吟av久久 | 亚洲日韩一区二区三区 | 亚洲人亚洲人成电影网站色 | 亚洲精品一区二区三区在线 | 人人爽人人爽人人片av亚洲 | 色欲人妻aaaaaaa无码 | 色婷婷久久一区二区三区麻豆 | 久久久www成人免费毛片 | 国产情侣作爱视频免费观看 | 欧洲熟妇精品视频 | 国产无套内射久久久国产 | 色老头在线一区二区三区 | 国产精品无码一区二区桃花视频 | 在线亚洲高清揄拍自拍一品区 | 色综合久久网 | 在线观看欧美一区二区三区 | 亚洲中文字幕av在天堂 | 天天摸天天碰天天添 | 精品国产精品久久一区免费式 | 成人试看120秒体验区 | 奇米影视888欧美在线观看 | 鲁大师影院在线观看 | 色综合久久中文娱乐网 | 色欲久久久天天天综合网精品 | 午夜精品一区二区三区的区别 | 成人无码视频免费播放 | av无码久久久久不卡免费网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 性色欲网站人妻丰满中文久久不卡 | 国产精品久久久久9999小说 | 欧美猛少妇色xxxxx | 无码人妻精品一区二区三区不卡 | 丰满人妻一区二区三区免费视频 | 日本乱人伦片中文三区 | 亚洲国产精品无码一区二区三区 | 男女下面进入的视频免费午夜 | 四十如虎的丰满熟妇啪啪 | 久久久久亚洲精品男人的天堂 | 亚洲综合无码久久精品综合 | 麻豆国产97在线 | 欧洲 | 国产9 9在线 | 中文 | 色婷婷久久一区二区三区麻豆 | 亚洲狠狠色丁香婷婷综合 | 99久久婷婷国产综合精品青草免费 | 乱码av麻豆丝袜熟女系列 | 国产成人精品视频ⅴa片软件竹菊 | 一本久道高清无码视频 | 丰满妇女强制高潮18xxxx | 国产亚洲精品久久久久久国模美 | 欧美性色19p | 疯狂三人交性欧美 | 老头边吃奶边弄进去呻吟 | 亚洲日韩中文字幕在线播放 | 亚洲欧洲日本综合aⅴ在线 | 亚洲精品国产a久久久久久 | 中文字幕乱妇无码av在线 | 妺妺窝人体色www在线小说 | 76少妇精品导航 | 波多野结衣aⅴ在线 | 亚洲日韩av一区二区三区中文 | 国产亚洲精品久久久久久 | 成人av无码一区二区三区 | 无码国模国产在线观看 | 欧美 丝袜 自拍 制服 另类 | 欧美丰满熟妇xxxx | 精品一区二区三区无码免费视频 | 亚洲欧洲中文日韩av乱码 | 性色欲网站人妻丰满中文久久不卡 | 国产精品国产三级国产专播 | 国色天香社区在线视频 | 波多野结衣av一区二区全免费观看 | 亚洲欧美日韩综合久久久 | 精品国产一区二区三区四区 | 国内精品人妻无码久久久影院蜜桃 | www国产精品内射老师 | 欧美日韩在线亚洲综合国产人 | 国产情侣作爱视频免费观看 | 老熟妇乱子伦牲交视频 | 麻豆av传媒蜜桃天美传媒 | 亚洲熟妇色xxxxx亚洲 | 亚洲人成网站在线播放942 | 国产亚洲欧美日韩亚洲中文色 | 人妻少妇被猛烈进入中文字幕 | 大地资源网第二页免费观看 | 在线观看欧美一区二区三区 | 亚洲精品国产精品乱码视色 | 性色欲网站人妻丰满中文久久不卡 | 久久久久久av无码免费看大片 | 久久久久久国产精品无码下载 | 双乳奶水饱满少妇呻吟 | 大地资源网第二页免费观看 | 日韩精品无码一本二本三本色 | 99riav国产精品视频 | 久久国产自偷自偷免费一区调 | 亚洲色大成网站www国产 | 国产深夜福利视频在线 | 强辱丰满人妻hd中文字幕 | 成年女人永久免费看片 | 成 人 网 站国产免费观看 | 未满小14洗澡无码视频网站 | 99久久精品无码一区二区毛片 | 久久久国产精品无码免费专区 | 亚洲а∨天堂久久精品2021 | 亚洲综合色区中文字幕 | 国产成人综合在线女婷五月99播放 | 国产 精品 自在自线 | 成人av无码一区二区三区 | 日韩无码专区 | 日本乱偷人妻中文字幕 | www国产精品内射老师 | 国产成人无码一二三区视频 | 久久99精品久久久久久动态图 | 亚洲性无码av中文字幕 | 婷婷五月综合缴情在线视频 | 亚洲成av人综合在线观看 | 久久 国产 尿 小便 嘘嘘 | 久久久国产精品无码免费专区 | 国产 浪潮av性色四虎 | 国产精品人人爽人人做我的可爱 | 国产熟妇另类久久久久 | 国产免费无码一区二区视频 | 亚洲精品中文字幕乱码 | 无码任你躁久久久久久久 | 国产精品久久久午夜夜伦鲁鲁 | 中文字幕人妻无码一区二区三区 | 在线观看免费人成视频 | 麻豆国产丝袜白领秘书在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 国产性生交xxxxx无码 | 中文字幕乱码人妻二区三区 | 国产亚洲精品久久久久久大师 | 日韩精品无码一区二区中文字幕 | 亚洲欧美日韩综合久久久 | 国产无遮挡吃胸膜奶免费看 | 色综合天天综合狠狠爱 | 亚洲综合无码一区二区三区 | 亚洲精品国产a久久久久久 | 精品成在人线av无码免费看 | 日本www一道久久久免费榴莲 | 国产亚洲欧美在线专区 | 国产人妻人伦精品 | 色爱情人网站 | 国产凸凹视频一区二区 | 亚洲 另类 在线 欧美 制服 | 久久99久久99精品中文字幕 | 人人妻人人澡人人爽欧美一区 | 综合人妻久久一区二区精品 | 四十如虎的丰满熟妇啪啪 | 综合激情五月综合激情五月激情1 | 午夜福利电影 | 久久精品人人做人人综合试看 | 国产精品国产三级国产专播 | 无码人中文字幕 | 男人的天堂2018无码 | 内射爽无广熟女亚洲 | 日欧一片内射va在线影院 | 亚洲人成人无码网www国产 | 欧美日韩一区二区综合 | 成人欧美一区二区三区黑人 | 黑人大群体交免费视频 | 久久综合香蕉国产蜜臀av | 久久久精品成人免费观看 | 欧美xxxxx精品 | 亚洲热妇无码av在线播放 | 高潮喷水的毛片 | 亚洲成av人在线观看网址 | 国产麻豆精品一区二区三区v视界 | 国产激情综合五月久久 | 亚洲爆乳精品无码一区二区三区 | 人人爽人人爽人人片av亚洲 | 亚洲成在人网站无码天堂 | 亚洲精品久久久久avwww潮水 | 日韩亚洲欧美精品综合 | 日本一卡二卡不卡视频查询 | 亚洲欧美日韩国产精品一区二区 | 日韩在线不卡免费视频一区 | 少妇性l交大片欧洲热妇乱xxx | 午夜时刻免费入口 | 久久熟妇人妻午夜寂寞影院 | aa片在线观看视频在线播放 | a片在线免费观看 | av无码久久久久不卡免费网站 | 又黄又爽又色的视频 | 十八禁视频网站在线观看 | 水蜜桃色314在线观看 | 亚洲国产精品无码久久久久高潮 | 成人无码影片精品久久久 | 国产激情无码一区二区app | 精品国产一区二区三区av 性色 | 亚洲精品欧美二区三区中文字幕 | 中文字幕乱码亚洲无线三区 | 国产成人一区二区三区在线观看 | 奇米影视888欧美在线观看 | 日韩欧美成人免费观看 | 天天摸天天碰天天添 | 婷婷五月综合缴情在线视频 | 国产精品内射视频免费 | 综合网日日天干夜夜久久 | 天堂无码人妻精品一区二区三区 | 免费无码午夜福利片69 | 精品亚洲韩国一区二区三区 | 欧美黑人巨大xxxxx | 99精品无人区乱码1区2区3区 | 国产精品无码一区二区桃花视频 | 激情内射亚州一区二区三区爱妻 | 免费人成在线观看网站 | 中文字幕无线码免费人妻 | 无码人妻少妇伦在线电影 | 中国女人内谢69xxxx | 丝袜人妻一区二区三区 | 免费无码肉片在线观看 | 国产亚av手机在线观看 | a片在线免费观看 | 欧美喷潮久久久xxxxx | 久久精品国产一区二区三区 | 学生妹亚洲一区二区 | 欧美成人家庭影院 | 国产激情无码一区二区app | 永久免费观看国产裸体美女 | 午夜成人1000部免费视频 | 樱花草在线社区www | 无码人妻少妇伦在线电影 | 俺去俺来也www色官网 | 午夜福利一区二区三区在线观看 | 亚洲伊人久久精品影院 | 无码人妻出轨黑人中文字幕 | 免费男性肉肉影院 | 国内揄拍国内精品人妻 | 日本一区二区更新不卡 | 亚洲成色在线综合网站 | 99久久无码一区人妻 | 欧美性生交活xxxxxdddd | 狂野欧美性猛交免费视频 | 亚洲自偷精品视频自拍 | 老子影院午夜精品无码 | 日本又色又爽又黄的a片18禁 | 国产麻豆精品精东影业av网站 | www成人国产高清内射 | 亚洲爆乳精品无码一区二区三区 | 色欲久久久天天天综合网精品 | 久久久亚洲欧洲日产国码αv | 精品国产成人一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 东京一本一道一二三区 | 国产精品-区区久久久狼 | 夜夜躁日日躁狠狠久久av | 十八禁真人啪啪免费网站 | 欧美xxxx黑人又粗又长 | 丰满少妇人妻久久久久久 | 欧美精品免费观看二区 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲无人区一区二区三区 | 亚洲精品成a人在线观看 | 国产激情艳情在线看视频 | 欧美 丝袜 自拍 制服 另类 | 久久精品丝袜高跟鞋 | 欧美色就是色 | 色诱久久久久综合网ywww | 麻豆国产丝袜白领秘书在线观看 | 国产欧美精品一区二区三区 | 国产美女极度色诱视频www | 国产黄在线观看免费观看不卡 | 精品乱码久久久久久久 | 成人一区二区免费视频 | 色欲人妻aaaaaaa无码 | 国产做国产爱免费视频 | 成人试看120秒体验区 | 亚洲日韩一区二区三区 | 日韩视频 中文字幕 视频一区 | 2020久久超碰国产精品最新 | 国内精品久久久久久中文字幕 | 老熟妇仑乱视频一区二区 | 精品人妻av区 | 国产高清av在线播放 | 国产成人无码av片在线观看不卡 | 啦啦啦www在线观看免费视频 | 亚洲性无码av中文字幕 | 丰满人妻翻云覆雨呻吟视频 | 天天做天天爱天天爽综合网 | 欧美激情内射喷水高潮 | 日韩人妻无码一区二区三区久久99 | 亚洲国产精品无码久久久久高潮 | 青青青手机频在线观看 | 国产乱人无码伦av在线a | 伊在人天堂亚洲香蕉精品区 | 久久99久久99精品中文字幕 | 久久精品国产一区二区三区 | 成人免费视频一区二区 | 亚洲成色在线综合网站 | 欧美日韩亚洲国产精品 | 欧美日韩一区二区综合 | 国产va免费精品观看 | 久久精品女人天堂av免费观看 | 日韩精品a片一区二区三区妖精 | 欧美日韩在线亚洲综合国产人 | 日本护士xxxxhd少妇 | 精品国精品国产自在久国产87 | 一区二区三区乱码在线 | 欧洲 | 国产精品99爱免费视频 | 在线观看免费人成视频 | 久久精品国产精品国产精品污 | 国产成人一区二区三区在线观看 | 国产精品亚洲专区无码不卡 | 一本久道久久综合婷婷五月 | 成人精品天堂一区二区三区 | 成人亚洲精品久久久久 | 丁香啪啪综合成人亚洲 | 大乳丰满人妻中文字幕日本 | 人人妻在人人 | 少妇人妻av毛片在线看 | 亚洲国产精品久久久久久 | 亚洲人交乣女bbw | 欧美第一黄网免费网站 | 欧美精品一区二区精品久久 | 国产成人精品无码播放 | 国产午夜精品一区二区三区嫩草 | 日韩人妻少妇一区二区三区 | 欧美日韩精品 | 亚洲毛片av日韩av无码 | 熟女少妇在线视频播放 | 香港三级日本三级妇三级 | 久久亚洲a片com人成 | 麻豆国产人妻欲求不满 | 99国产欧美久久久精品 | 粉嫩少妇内射浓精videos | 日日摸夜夜摸狠狠摸婷婷 | 人妻少妇被猛烈进入中文字幕 | 99久久精品日本一区二区免费 | 99久久精品日本一区二区免费 | а√天堂www在线天堂小说 | av在线亚洲欧洲日产一区二区 | 女人高潮内射99精品 | 午夜福利一区二区三区在线观看 | 亚洲va中文字幕无码久久不卡 | 国产无套粉嫩白浆在线 | 久久久精品国产sm最大网站 | 亚洲码国产精品高潮在线 | 麻豆国产97在线 | 欧洲 | 亚洲成熟女人毛毛耸耸多 | 丰满人妻翻云覆雨呻吟视频 | 国产精品人人爽人人做我的可爱 | 亚洲精品一区二区三区在线 | 丰满护士巨好爽好大乳 | 国产成人久久精品流白浆 | 色情久久久av熟女人妻网站 | 中文字幕无码热在线视频 | 无码任你躁久久久久久久 | 99久久久无码国产精品免费 | 国产精品亚洲专区无码不卡 | 国产女主播喷水视频在线观看 | 少妇高潮一区二区三区99 | 成人精品一区二区三区中文字幕 | 无遮无挡爽爽免费视频 | 草草网站影院白丝内射 | 久久精品视频在线看15 | 麻豆果冻传媒2021精品传媒一区下载 | а天堂中文在线官网 | 无套内射视频囯产 | 青草视频在线播放 | 一本色道久久综合亚洲精品不卡 | 国产成人综合美国十次 | 中文字幕无码日韩欧毛 | 人人妻人人澡人人爽人人精品 | 俺去俺来也在线www色官网 | 少妇人妻偷人精品无码视频 | 少女韩国电视剧在线观看完整 | 国产猛烈高潮尖叫视频免费 | 欧美精品免费观看二区 | 色婷婷综合激情综在线播放 | 风流少妇按摩来高潮 | 十八禁真人啪啪免费网站 | 99久久亚洲精品无码毛片 | 国产三级精品三级男人的天堂 | 99久久精品日本一区二区免费 | 美女黄网站人色视频免费国产 | 中文字幕 亚洲精品 第1页 | 女高中生第一次破苞av | 亚洲日韩av一区二区三区中文 | 5858s亚洲色大成网站www | 亚洲日本一区二区三区在线 | 婷婷综合久久中文字幕蜜桃三电影 | 夜夜躁日日躁狠狠久久av | 国产精品香蕉在线观看 | 天天躁夜夜躁狠狠是什么心态 | 成人无码精品1区2区3区免费看 | 国产成人无码专区 | 天堂亚洲免费视频 | 大肉大捧一进一出好爽视频 | 天干天干啦夜天干天2017 | 国产亚洲人成a在线v网站 | aa片在线观看视频在线播放 | 日韩av无码一区二区三区 | 国产无遮挡又黄又爽免费视频 | 婷婷六月久久综合丁香 | 国产无遮挡又黄又爽免费视频 | 欧美丰满熟妇xxxx性ppx人交 | 欧美午夜特黄aaaaaa片 | 国产亚洲精品久久久久久国模美 | 精品一区二区三区无码免费视频 | 欧美大屁股xxxxhd黑色 | 精品久久久无码中文字幕 | 东京热一精品无码av | 久久综合久久自在自线精品自 | 日日碰狠狠躁久久躁蜜桃 | 午夜肉伦伦影院 | 久久综合九色综合欧美狠狠 | 久久久中文久久久无码 | 99国产精品白浆在线观看免费 | 亚洲毛片av日韩av无码 | 白嫩日本少妇做爰 | 色婷婷综合激情综在线播放 | 日韩av无码一区二区三区不卡 | 人妻中文无码久热丝袜 | 国内丰满熟女出轨videos | 久久亚洲日韩精品一区二区三区 | 日韩欧美群交p片內射中文 | 特级做a爰片毛片免费69 | 人妻有码中文字幕在线 | 国产香蕉尹人视频在线 | 久久国产精品偷任你爽任你 | 久久精品无码一区二区三区 | 精品国产aⅴ无码一区二区 | 国产精品久久久久影院嫩草 | 亚无码乱人伦一区二区 | 国产成人一区二区三区别 | 国产精品亚洲lv粉色 | 又紧又大又爽精品一区二区 | 欧美成人高清在线播放 | 久久久久久a亚洲欧洲av冫 | 四十如虎的丰满熟妇啪啪 | 亚洲性无码av中文字幕 | 色婷婷久久一区二区三区麻豆 | 性做久久久久久久久 | 亚洲天堂2017无码中文 | 特黄特色大片免费播放器图片 | 国产婷婷色一区二区三区在线 | 欧洲美熟女乱又伦 | 最新国产麻豆aⅴ精品无码 | 蜜桃视频韩日免费播放 | 天下第一社区视频www日本 | 亚洲人成影院在线观看 | 在线亚洲高清揄拍自拍一品区 | 国产精品理论片在线观看 | 亚洲另类伦春色综合小说 | 色噜噜亚洲男人的天堂 | 秋霞成人午夜鲁丝一区二区三区 | 成年美女黄网站色大免费视频 | 老太婆性杂交欧美肥老太 | 午夜无码区在线观看 | 扒开双腿疯狂进出爽爽爽视频 | 天天燥日日燥 | 在线а√天堂中文官网 | 国产精品久久久久无码av色戒 | 97精品国产97久久久久久免费 | 熟女少妇在线视频播放 | 亚洲毛片av日韩av无码 | 欧美成人高清在线播放 | 国产精品久久国产三级国 | 亚洲中文字幕无码中文字在线 | 青青久在线视频免费观看 | 一本久道久久综合狠狠爱 | 熟妇激情内射com | a在线亚洲男人的天堂 | aⅴ亚洲 日韩 色 图网站 播放 | 成熟人妻av无码专区 | 欧美老人巨大xxxx做受 | 国产亚洲人成a在线v网站 |