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

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

C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池

2020-05-23 14:10:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池,感興趣的小伙伴們可以參考一下
 

本文實(shí)例介紹了C 語(yǔ)言實(shí)現(xiàn)線程池,支持動(dòng)態(tài)拓展和銷(xiāo)毀,分享給大家供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)功能

  • 1.初始化指定個(gè)數(shù)的線程
  • 2.使用鏈表來(lái)管理任務(wù)隊(duì)列
  • 3.支持拓展動(dòng)態(tài)線程
  • 4.如果閑置線程過(guò)多,動(dòng)態(tài)銷(xiāo)毀部分線程
#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <signal.h> /*線程的任務(wù)隊(duì)列由,函數(shù)和參數(shù)組成,任務(wù)由鏈表來(lái)進(jìn)行管理*/typedef struct thread_worker_s{  void *(*process)(void *arg); //處理函數(shù)  void *arg;          //參數(shù)  struct thread_worker_s *next;}thread_worker_t; #define bool int#define true 1#define false 0 /*線程池中各線程狀態(tài)描述*/#define THREAD_STATE_RUN        0#define THREAD_STATE_TASK_WAITING   1#define THREAD_STATE_TASK_PROCESSING  2#define THREAD_STATE_TASK_FINISHED   3#define THREAD_STATE_EXIT       4     typedef struct thread_info_s{  pthread_t id;  int    state;   struct thread_info_s *next;}thread_info_t; static char* thread_state_map[] ={"創(chuàng)建","等待任務(wù)","處理中","處理完成","已退出"};/*線程壓縮的時(shí)候只有 0,1,2,4 狀態(tài)的線程可以銷(xiāo)毀*/  /*線程池管理器*/#define THREAD_BUSY_PERCENT 0.5  /*線程:任務(wù) = 1:2 值越小,說(shuō)明任務(wù)多,增加線程*/#define THREAD_IDLE_PERCENT 2   /*線程:任務(wù) = 2:1 值大于1,線程多于任務(wù),銷(xiāo)毀部分線程*/ typedef struct thread_pool_s{  pthread_mutex_t queue_lock ; //隊(duì)列互斥鎖,即涉及到隊(duì)列修改時(shí)需要加鎖  pthread_cond_t queue_ready; //隊(duì)列條件鎖,隊(duì)列滿足某個(gè)條件,觸發(fā)等待這個(gè)條件的線程繼續(xù)執(zhí)行,比如說(shuō)隊(duì)列滿了,隊(duì)列空了   thread_worker_t *head   ;    //任務(wù)隊(duì)列頭指針  bool    is_destroy   ;    //線程池是否已經(jīng)銷(xiāo)毀  int num;              //線程的個(gè)數(shù)  int rnum;         ;    //正在跑的線程  int knum;         ;    //已殺死的線程  int queue_size       ;    //工作隊(duì)列的大小   thread_info_t *threads   ;    //線程組id,通過(guò)pthread_join(thread_ids[0],NULL) 來(lái)執(zhí)行線程  pthread_t   display   ;    //打印線程  pthread_t   destroy   ;    //定期銷(xiāo)毀線程的線程id  pthread_t   extend    ;  float percent       ;    //線程個(gè)數(shù)于任務(wù)的比例 rnum/queue_size  int  init_num      ;  pthread_cond_t  extend_ready     ;    //如果要增加線程}thread_pool_t; /*-------------------------函數(shù)聲明----------------------*//** * 1.初始化互斥變量 * 2.初始化等待變量 * 3.創(chuàng)建指定個(gè)數(shù)的線程線程 */thread_pool_t* thread_pool_create(int num);void *thread_excute_route(void *arg);  /*調(diào)試函數(shù)*/void debug(char *message,int flag){  if(flag)    printf("%s/n",message);} void *display_thread(void *arg);/** * 添加任務(wù)包括以下幾個(gè)操作 * 1.將任務(wù)添加到隊(duì)列末尾 * 2.通知等待進(jìn)程來(lái)處理這個(gè)任務(wù) pthread_cond_singal();*/int thread_pool_add_worker(thread_pool_t *pool,void*(*process)(void *arg),void *arg); //網(wǎng)線程池的隊(duì)列中增加一個(gè)需要執(zhí)行的函數(shù),也就是任務(wù) /** * 銷(xiāo)毀線程池,包括以下幾個(gè)部分 * 1.通知所有等待的進(jìn)程 pthread_cond_broadcase * 2.等待所有的線程執(zhí)行完 * 3.銷(xiāo)毀任務(wù)列表 * 4.釋放鎖,釋放條件 * 4.銷(xiāo)毀線程池對(duì)象 */   void *thread_pool_is_need_recovery(void *arg);void *thread_pool_is_need_extend(void *arg);void thread_pool_destory(thread_pool_t *pool);  thread_pool_t *thread_pool_create(int num){  if(num<1){    return NULL;  }  thread_pool_t *p;  p = (thread_pool_t*)malloc(sizeof(struct thread_pool_s));  if(p==NULL)    return NULL;  p->init_num = num;  /*初始化互斥變量與條件變量*/  pthread_mutex_init(&(p->queue_lock),NULL);  pthread_cond_init(&(p->queue_ready),NULL);   /*設(shè)置線程個(gè)數(shù)*/  p->num  = num;   p->rnum = num;  p->knum = 0;   p->head = NULL;  p->queue_size =0;   p->is_destroy = false;      int i=0;  thread_info_t *tmp=NULL;  for(i=0;i<num;i++){    /*創(chuàng)建線程*/    tmp= (struct thread_info_s*)malloc(sizeof(struct thread_info_s));    if(tmp==NULL){      free(p);      return NULL;    }else{      tmp->next = p->threads;      p->threads = tmp;    }    pthread_create(&(tmp->id),NULL,thread_excute_route,p);    tmp->state = THREAD_STATE_RUN;  }   /*顯示*/  pthread_create(&(p->display),NULL,display_thread,p);  /*檢測(cè)是否需要?jiǎng)討B(tài)線程*/  //pthread_create(&(p->extend),NULL,thread_pool_is_need_extend,p);  /*動(dòng)態(tài)銷(xiāo)毀*/  pthread_create(&(p->destroy),NULL,thread_pool_is_need_recovery,p);  return p;} int thread_pool_add_worker(thread_pool_t *pool,void*(*process)(void*arg),void*arg){  thread_pool_t *p= pool;  thread_worker_t *worker=NULL,*member=NULL;  worker = (thread_worker_t*)malloc(sizeof(struct thread_worker_s));  int incr=0;  if(worker==NULL){    return -1;  }  worker->process = process;  worker->arg   = arg;  worker->next  = NULL;  thread_pool_is_need_extend(pool);  pthread_mutex_lock(&(p->queue_lock));  member = p->head;  if(member!=NULL){    while(member->next!=NULL)      member = member->next;    member->next = worker;  }else{    p->head = worker;  }  p->queue_size ++;  pthread_mutex_unlock(&(p->queue_lock));  pthread_cond_signal(&(p->queue_ready));  return 1;}  void thread_pool_wait(thread_pool_t *pool){  thread_info_t *thread;  int i=0;  for(i=0;i<pool->num;i++){    thread = (thread_info_t*)(pool->threads+i);    thread->state = THREAD_STATE_EXIT;    pthread_join(thread->id,NULL);  }}void thread_pool_destory(thread_pool_t *pool){  thread_pool_t  *p   = pool;  thread_worker_t *member = NULL;   if(p->is_destroy)    return ;  p->is_destroy = true;  pthread_cond_broadcast(&(p->queue_ready));  thread_pool_wait(pool);  free(p->threads);  p->threads = NULL;  /*銷(xiāo)毀任務(wù)列表*/  while(p->head){    member = p->head;    p->head = member->next;    free(member);  }  /*銷(xiāo)毀線程列表*/  thread_info_t *tmp=NULL;  while(p->threads){    tmp = p->threads;    p->threads = tmp->next;    free(tmp);  }   pthread_mutex_destroy(&(p->queue_lock));  pthread_cond_destroy(&(p->queue_ready));  return ;}/*通過(guò)線程id,找到對(duì)應(yīng)的線程*/thread_info_t *get_thread_by_id(thread_pool_t *pool,pthread_t id){  thread_info_t *thread=NULL;  thread_info_t *p=pool->threads;  while(p!=NULL){    if(p->id==id)      return p;    p = p->next;  }  return NULL;}  /*每個(gè)線程入口函數(shù)*/void *thread_excute_route(void *arg){  thread_worker_t *worker = NULL;  thread_info_t  *thread = NULL;   thread_pool_t*  p = (thread_pool_t*)arg;  //printf("thread %lld create success/n",pthread_self());  while(1){    pthread_mutex_lock(&(p->queue_lock));     /*獲取當(dāng)前線程的id*/    pthread_t pthread_id = pthread_self();    /*設(shè)置當(dāng)前狀態(tài)*/    thread = get_thread_by_id(p,pthread_id);     /*線程池被銷(xiāo)毀,并且沒(méi)有任務(wù)了*/    if(p->is_destroy==true && p->queue_size ==0){      pthread_mutex_unlock(&(p->queue_lock));      thread->state = THREAD_STATE_EXIT;      p->knum ++;      p->rnum --;      pthread_exit(NULL);    }    if(thread){      thread->state = THREAD_STATE_TASK_WAITING; /*線程正在等待任務(wù)*/    }    /*線程池沒(méi)有被銷(xiāo)毀,沒(méi)有任務(wù)到來(lái)就一直等待*/    while(p->queue_size==0 && !p->is_destroy){      pthread_cond_wait(&(p->queue_ready),&(p->queue_lock));    }    p->queue_size--;    worker = p->head;    p->head = worker->next;    pthread_mutex_unlock(&(p->queue_lock));          if(thread)      thread->state = THREAD_STATE_TASK_PROCESSING; /*線程正在執(zhí)行任務(wù)*/    (*(worker->process))(worker->arg);    if(thread)      thread->state = THREAD_STATE_TASK_FINISHED;  /*任務(wù)執(zhí)行完成*/    free(worker);    worker = NULL;  }}   /*拓展線程*/void *thread_pool_is_need_extend(void *arg){  thread_pool_t *p = (thread_pool_t *)arg;  thread_pool_t *pool = p;  /*判斷是否需要增加線程,最終目的 線程:任務(wù)=1:2*/  if(p->queue_size>100){    int incr =0;    if(((float)p->rnum/p->queue_size) < THREAD_BUSY_PERCENT ){      incr = (p->queue_size*THREAD_BUSY_PERCENT) - p->rnum; /*計(jì)算需要增加線程個(gè)數(shù)*/      int i=0;      thread_info_t *tmp=NULL;      thread_pool_t *p = pool;      pthread_mutex_lock(&pool->queue_lock);      if(p->queue_size<100){        pthread_mutex_unlock(&pool->queue_lock);        return ;      }      for(i=0;i<incr;i++){        /*創(chuàng)建線程*/        tmp= (struct thread_info_s*)malloc(sizeof(struct thread_info_s));        if(tmp==NULL){          continue;        }else{          tmp->next = p->threads;          p->threads = tmp;        }        p->num ++;        p->rnum ++;        pthread_create(&(tmp->id),NULL,thread_excute_route,p);        tmp->state = THREAD_STATE_RUN;      }      pthread_mutex_unlock(&pool->queue_lock);    }  }  //pthread_cond_signal(&pool->extend_ready);}pthread_cond_t sum_ready;/*恢復(fù)初始線程個(gè)數(shù)*/void *thread_pool_is_need_recovery(void *arg){  thread_pool_t *pool = (thread_pool_t *)arg;  int i=0;  thread_info_t *tmp = NULL,*prev=NULL,*p1=NULL;  /*如果沒(méi)有任務(wù)了,當(dāng)前線程大于初始化的線程個(gè)數(shù)*/  while(1){    i=0;    if(pool->queue_size==0 && pool->rnum > pool->init_num ){      sleep(5);      /*5s秒內(nèi)還是這個(gè)狀態(tài)的話就,銷(xiāo)毀部分線程*/      if(pool->queue_size==0 && pool->rnum > pool->init_num ){        pthread_mutex_lock(&pool->queue_lock);        tmp = pool->threads;        while((pool->rnum != pool->init_num) && tmp){          /*找到空閑的線程*/          if(tmp->state != THREAD_STATE_TASK_PROCESSING){            i++;            if(prev)              prev->next  = tmp->next;            else              pool->threads = tmp->next;            pool->rnum --; /*正在運(yùn)行的線程減一*/            pool->knum ++; /*銷(xiāo)毀的線程加一*/            kill(tmp->id,SIGKILL); /*銷(xiāo)毀線程*/            p1 = tmp;            tmp = tmp->next;            free(p1);            continue;          }          prev = tmp;          tmp = tmp->next;        }        pthread_mutex_unlock(&pool->queue_lock);        printf("5s內(nèi)沒(méi)有新任務(wù)銷(xiāo)毀部分線程,銷(xiāo)毀了 %d 個(gè)線程/n",i);      }    }    sleep(5);  }}   /*打印一些信息的*/void *display_thread(void *arg){  thread_pool_t *p =(thread_pool_t *)arg;  thread_info_t *thread = NULL;  int i=0;  while(1){    printf("threads %d,running %d,killed %d/n",p->num,p->rnum,p->knum);  /*線程總數(shù),正在跑的,已銷(xiāo)毀的*/    thread = p->threads;    while(thread){      printf("id=%ld,state=%s/n",thread->id,thread_state_map[thread->state]);      thread = thread->next;    }    sleep(5);  }}

希望本文所述對(duì)大家學(xué)習(xí)C語(yǔ)言程序設(shè)計(jì)有所幫助。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
中国女人内谢69xxxx视频| 在线视频一区二区三区在线播放| 在线观看的网站你懂的| 女厕盗摄一区二区三区| 9久久婷婷国产综合精品性色| 性欧美最新另类| jjzz在线观看| 国产一区三区在线播放| www.成年人视频| 国产成人jvid在线播放| 18在线观看的| 天天操天天操天天干| 图片区小说区国产精品视频| 国产情侣高潮对白| 欧美激情综合| 日韩在线精品视频| 国产精品xxxx喷水欧美| 日本一级片免费看| 国产美女自拍视频| 日韩一卡二卡在线观看| 青青草97国产精品免费观看无弹窗版| 国产精品av久久久久久麻豆网| 国产精品理人伦一区二区三区| 日韩精品在线免费视频| 91成人噜噜噜在线播放| 精品国产第一区二区三区观看体验| 亚洲欧美激情另类| 欧美日韩在线大尺度| 欧美一区二区在线观看视频| 伊人伊成久久人综合网站| 黄色av成人| аⅴ成人天堂中文在线| 综合天堂久久久久久久| 一区二区三区四区在线观看视频| 五月天久久久| 福利视频免费在线观看| 欧美一级一区二区| 色婷婷综合久久久久久| 欧美 日韩 激情| 久久亚洲一区二区三区明星换脸| 色中色一区二区| 美女日批免费视频| 国产一在线精品一区在线观看| 免费在线观看污网站| 鲁丝一区鲁丝二区鲁丝三区| 国产亚洲电影| 欧美三级午夜理伦| 亚洲国产精品一区二区第一页| 欧美人与禽猛交乱配| 欧美性生交xxxxx久久久| 成年网站免费| 日韩av视屏| 国产精品久久久网站| 99久久久无码国产精品免费| 一区二区三区国产盗摄| 亚洲欧美日韩精品一区二区| 色综合久久久久综合| 欧美18xxxxx| 中文字幕一区二区三区免费视频| 精品中文一区| 影音先锋欧美资源| 超碰cao国产精品一区二区| 51精品国自产在线| 精品无人区一区二区三区| 黑人一区二区| 五月天av网站| 国产欧美日韩在线观看| 欧美大片免费观看在线观看网站推荐| 五月婷婷六月丁香激情| 中文字幕第五页| 国产午夜精品视频一区二区三区| 懂色av懂色av粉嫩av| 婷婷开心激情综合| 欧美人与性动交xxⅹxx| 精品国产亚洲一区二区麻豆| 久久精品国产91精品亚洲| 一个人看的www视频免费观看| 91蝌蚪视频在线观看| 四虎成年永久免费网站| 亚洲欧美日韩久久久久久| 亚洲精品第一国产综合野| 午夜精品免费观看| av中文在线资源| 电影一区二区三区| 国产二区国产一区在线观看| 在线观看中文字幕| 国产又粗又硬又长| 欧美日韩一区二区三区四区不卡| 亚洲欧美清纯在线制服| 久久久久久久九九九九| 欧美日韩一区二区高清| 九九精品在线视频| 伊人成人网在线看| 色综合色狠狠天天综合色| 日本美女黄色一级片| 天天操天天干视频| 亚洲a∨无码无在线观看| 激情五月开心婷婷| 成人国产视频在线| 伊人色综合影院| 国产精品三级美女白浆呻吟| 岛国片在线看| 欧美v在线观看| 精品婷婷色一区二区三区蜜桃| 一区二区三区在线免费| 免费在线看一区| 6080yy午夜一二三区久久| 国产手机在线观看| 日韩欧美的一区二区| 精品久久网站| 国产a∨精品一区二区三区仙踪林| 国产手机精品在线| 久久99国产精品麻豆| 欧美一级精品大片| heyzo亚洲| 国产精品久久91| 国产成人免费视频网站高清观看视频| 日本成人免费在线观看| 在线视频日韩欧美| 国产又粗又猛又爽又| 一区二区激情小说| 亚洲第一区第二区第三区| 午夜精品一区二区三区在线观看| 一级毛片视频在线观看| 一级毛片免费看| 欧美激情第一页在线观看| 爱情岛论坛vip永久入口| 国产女王在线**视频| 亚洲一区二区三区免费观看| 紧缚奴在线一区二区三区| 国产精品蜜臀在线观看| 国产精品推荐精品| 欧美一区三区三区高中清蜜桃| 国产精品美女无圣光视频| 一区二区三区.www| 91精品影视| 亚洲欧美日韩动漫| 奇米狠狠一区二区三区| 国产精品国产三级国产在线观看| 国产精品嫩草影院8vv8| 伊人久久青青草| 91老司机在线| 国产美女av在线| 国产精品福利在线观看网址| 牛夜精品久久久久久久| 强开小嫩苞一区二区三区视频| 99精品久久久久久中文字幕| 高清精品一区二区三区一区| a亚洲天堂av| 久久久久99精品| 伊人75在线| 国产精品片aa在线观看| 成人信息集中地| 国产三级视频在线播放线观看| 成人黄色三级视频| 日韩精品成人在线| 中文字幕久热精品在线视频| 91一区二区三区在线播放| 在线观看国产精品入口| 粉嫩av懂色av蜜臀av分享| 亚洲精品一区二区三区不| 欧美6699在线视频免费| 一级片视频网站| www.天天射.com| 91在线免费观看| 国产精品v欧美精品∨日韩| 亚洲成人福利| 欧美a在线视频| 亚洲一区和二区| 欧美视频一区二区三区…| 亚洲精品少妇一区二区| 欧美—级a级欧美特级ar全黄| 日韩成人午夜影院| 中文字幕免费高清电视剧网站在线观看| 国产v综合ⅴ日韩v欧美大片| 日韩一区二区不卡| 色婷婷av一区二区三区之e本道| 亚洲人做受高潮| se01亚洲视频| 99精品欧美一区二区蜜桃免费| 97不卡在线视频| 97超碰蝌蚪网人人做人人爽| 黄色av电影在线播放| 男人j桶女人的网站| 一卡二卡欧美日韩| 亚洲成av人片在线观看| 欧美一进一出视频| 欧美日韩在线播| 久久亚洲AV无码| 亚洲精品日产aⅴ| 九九国产精品视频| 欧美日韩1080p| 777一区二区| 另类小说视频一区二区| av亚洲产国偷v产偷v自拍| 久热国产在线| 96久久久久久| 麻豆久久久9性大片| 国产伦理精品不卡| 午夜电影一区二区| 奇米影视四色在线| 国产一区二区三区亚洲综合| 国产精品免费91| 亚洲熟女乱综合一区二区| 久久久久久欧美精品色一二三四| 四虎影院观看视频在线观看| 91福利在线播放| 日本高清视频在线观看| fc2成人免费人成在线观看播放| 色yeye香蕉凹凸一区二区av| 国产免费区一区二区三视频免费| 在线视频不卡一区二区| 狠狠网亚洲精品| 中文字幕精品—区二区日日骚| 日韩视频在线直播| 欲色天天网综合久久| 91久久电影| 日韩午夜小视频| 日本在线观看大片免费视频| √新版天堂资源在线资源| 国产伦精品一区二区三区妓女下载| 亚洲精品在线视频观看| 久久久久久影视| 成人av无码一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 天堂一区在线观看| 日本精品久久久久久久久久| 日本中文字幕在线2020| 亚洲第一男人天堂| 久久av影院| 亚洲欧美精品在线| 超碰在线播放97| 日本黄网站色大片免费观看| 中文字幕乱码一区| av电影天堂一区二区在线观看| 亚洲一级在线播放| 一区二区小说| 国产视频精品一区二区三区| av片在线观看免费| 国产精品劲爆视频| 亚洲性视频大全| 国产区卡一卡二卡三乱码免费| 日本片在线看| 在线观看黄网站免费继续| 亚洲精品中文字幕在线观看| 伊人亚洲综合网| 男女视频一区二区三区| 国产麻豆一区二区三区| 亚洲国产中文字幕在线| 98在线视频| 国产精品高清无码在线观看| 麻豆亚洲av成人无码久久精品| 国产一区二区三区精品在线观看| www.亚洲| 亚洲人成网站精品片在线观看| 久久久久久久av麻豆果冻| 国产精品乡下勾搭老头1| 在线播放日韩导航| 亚洲一线二线三线久久久| 国产免费内射又粗又爽密桃视频| 九一在线免费观看| 欧区一欧区二欧区三| 国产精品永久入口久久久| 欧美国产一区二区三区激情无套| 一区二区三区在线视频播放| 好看的亚洲午夜视频在线| 在线免费看h| 特级黄国产片一级视频播放| 自由日本语亚洲人高潮| 亚洲黄色免费看| 亚洲人成亚洲人成在线观看| 久久美女精品| 成年人观看网站| 美女毛片免费看| 中文字幕无码不卡免费视频| 婷婷综合五月| 91亚洲精品久久久蜜桃网站| a在线欧美一区| 国产精品视频第一区| 操一操视频一区| 91久久在线播放| 伊人国产精品| 欧美成人a∨高清免费观看| 91在线高清| 在线看的毛片| 99久久免费看精品国产一区| 极品人妻一区二区| 色94色欧美sute亚洲线路二| 黄色片网站在线| 国产精品99爱免费视频| 久久久久中文| 天堂在线资源8| 国产成人3p视频免费观看| 国产一区二区三区四区五区| 一级黄色片在线播放| 一二三区在线观看| 亚洲一区电影在线观看| 3d精品h动漫啪啪一区二区| 禁网站在线观看免费视频| a优女a优女片| 国产中文av在线| 亚洲伊人伊色伊影伊综合网| 日本一区免费观看| 欧美大片aaa| 亚洲精品不卡在线观看| 日韩欧美一区二区三区在线观看| 涩涩视频在线观看下载| 日韩精品――中文字幕| 懂色一区二区三区av片| 久久影视中文粉嫩av| 一区二区三区欧美在线观看| 中文字幕综合网| 国产特级黄色录像| 91精品91久久久中77777老牛| 伊人蜜桃色噜噜激情综合| 自拍偷拍亚洲天堂| 亚洲精品不卡在线观看| av毛片精品| www.jizz在线观看| 在线精品国产成人综合| 视频免费在线看| 久久精品国产亚洲av高清色欲| 国产欧美精品久久| 日本不卡中文字幕| 欧美精品成人一区二区三区四区| 视频免费1区二区三区| 大胆av不用播放器在线播放| 性一交一乱一伦一色一情|