日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何写优雅的代码(5)——远离临界区噩梦

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何写优雅的代码(5)——远离临界区噩梦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//========================================================================
//TITLE:
// 如何寫優雅的代碼(5)--遠離臨界區噩夢
//AUTHOR:
// norains
//DATE:
// Tuesday 01- December-2009
//Environment:
// WINDOWS CE 5.0
//========================================================================

  在平時的多線程編程中,我們往往離不開臨界區。會用,甚至是用得好的朋友,估計不少;但用得萬無一失的,相對而言,可能就會少很多。
  
  不信?我們來看看下面這段代碼:  
  try   {    EnterCriticalSection(&g_cs);    Cal3rdPartCode(pParam);    LeaveCriticalSection(&g_cs);   }   catch(...)   {    //There is error    //dwRet = 0;   }

  這段代碼看起來似乎沒有什么問題?但如果說,這段代碼會引發孤立臨界區的問題,你會信么?換句話說,如果Cal3rdPartCode(pParam)函數會拋出異常,那么代碼就直接跳轉到catch部分。那事情就嚴重了,因為代碼根本就沒有調用LeaveCriticalSection(&g_cs),將g_cs這臨界區完全孤立了起來,別的線程就只能一直等待該臨界區。
  
  似乎情況很糟糕,不是么?當然,糟糕并不代表陷入世界末日,雖然路途上充滿了荊棘,但畢竟我們還是能看到陽光。
  
  我們總不能在一棵樹上吊死吧。換個角度,臨界區的使用,必須是EnterCriticalSection和LeaveCriticalSection配套使用。那么我們想想,C++里面,有什么東西是強制配套的,根本不用使用者干預的?也許有的朋友已經想到了。沒錯,是類,類的構造函數和析構函數。
  
  正常使用的話,無論使用者愿不愿意,類的構造函數和析構函數都是被編譯器強制配套使用。所以,我們可以在構造函數中調用EnterCriticalSection,在析構函數則是LeaveCriticalSection。
  
  根據此思想,我們最簡單的用類來調用臨界區的代碼誕生了:
   class CLock { public: CLock(LPCRITICAL_SECTION pCriticalSection): m_ pCriticalSection(pCriticalSection)     {      EnterCriticalSection(m_ pCriticalSection);     };          virtual ~CLock()     {      LeaveCriticalSection (m_ pCriticalSection);     };          private:      LPCRITICAL_SECTION m_ pCriticalSection; };


  使用上也是簡單明了:
   void CallFunctionProc() { CLock lock(&g_cs); }   

  但這樣完美了么?很遺憾,這只是萬里長征的第一步,我們的路還很漫長。最根本的問題,我們如何確保傳入的臨界區指針是有效的?換句話說,我們無法保證傳入的臨界區指針是沒有調用過DeleteCriticalSection的。
  
  如果代碼是如下的書寫,很明顯,肯定會有我們無法預料的異常:
   void CallFunctionProc() { DeleteCriticalSection(&g_cs); ... CLock lock(&g_cs); }   

  那有沒有這么一種機制,我們可以通過它進入臨界區,但我們卻不能讓它刪除臨界區,或是即使刪除了,我們也有足夠的信息獲知。
  
  萬事無絕對,既然我們能想到,那么我們就能做到。人有多大膽,地有多大產,在這個奇跡倍出的IT界,有時候也并不只是一句華而不實的口號。
  
  首先,我們將創建臨界區的操作封裝于類中,使用者只能獲得創建的序號;然后,如果想進入臨界區,只要傳入序號即可;最后,如果不需要該臨界區,那么傳入序號刪除即可。這樣的好處是,通過序號這個橋梁,既能使用臨界區的功能,又不會引發臨界區的不穩定。
  
  我們先來看看創建的函數:
  static DWORD CLock::Create() { CRITICAL_SECTION* pcsCriticalSection = new CRITICAL_SECTION(); if(pcsCriticalSection == NULL) { return Lock::INVALID_INDEX; } __try { InitializeCriticalSection(pcsCriticalSection); } __except(GetExceptionCode() == STATUS_NO_MEMORY) { //Failed to intialize the critical section, so delete the object created by new operate. delete pcsCriticalSection; return Lock::INVALID_INDEX; } return AddTable(pcsCriticalSection); }   

  雖然我們將Create函數封裝于CLock類中,但我們不打算需要通過對象才能調用,所以我們以static進行修飾,讓其成為類函數。那么,我們調用的時候,就可以直接通過類作用域使用:
  
DWORD dwIndex = CLock::Create();
  
  我們留意一下這句:
  CRITICAL_SECTION* pcsCriticalSection = new CRITICAL_SECTION();
  
  這句代碼用來在棧中創建CRITICAL_SECTION對象。之所以這么做,是因為如果使用局部變量,那么在函數返回時,局部變量就被刪除。而通過new創建出來的對象,除非我們調用delete,否則在程序運行期中一直存在。這樣就能達到創建的目的。
  
  接下來的異常捕獲部分可能是大家都會忽略的。根據MSDN的文檔,InitializeCriticalSection并不保證絕對能創建成功。當內存不足時,就會拋出STATUS_NO_MEMORY異常。所以我們必須捕獲這個異常,并進行相應的處理。
  
  話又說回來,在我們平時直接調用臨界區的方式中,如果出現這個異常是很麻煩的事情。因為CRITICAL_SECTION對象的內部細節沒有公布,我們無法根據CRITICAL_SECTION對象來確定臨界區是否有效,也就無法保證代碼的健壯性。
  
  如果一切順利,我們就通過AddTable將臨界區放入存儲空間中。
  
  AddTable的實現如下:
  static DWORD CLock::AddTable(CRITICAL_SECTION* pcsCriticalSection) { if(ms_pmpCriticalSection == NULL) { ms_pmpCriticalSection = new std::map<DWORD,CriticalSectionData>(); if(ms_pmpCriticalSection == NULL) { return Lock::INVALID_INDEX; } else { ms_dwIndex = 0; } } CriticalSectionData newCriticalSectionData = {pcsCriticalSection,0}; InterlockedIncrement(reinterpret_cast<LONG *>(&ms_dwIndex)); ms_pmpCriticalSection->insert(std::make_pair(ms_dwIndex,newCriticalSectionData)); return ms_dwIndex; }   

  ms_pmpCriticalSection是一個成員變量指針,其在頭文件聲明如下:
  
  static std::map<DWORD,CriticalSectionData> *ms_pmpCriticalSection;
  
  CriticalSectionData是我們定義的一個結構體,有兩個成員變量,一個是指向臨界區對象,另一個則記錄了進入該臨界區的次數:  
struct CriticalSectionData { CRITICAL_SECTION *pCriticalSection; LONG lLockCount; };
  
  看到這里,可能有的朋友說,CRITICAL_SECTION不是有個LockCount成員么,直接使用它不就行了?從理論上來說,這是可以的。但對于該結構,微軟并沒有描述文檔,換而言之,微軟保留了變更其成員的權利。雖然我們可以相信,微軟一般不會做這種費力不討好的事,但誰知道哪天微軟又心血來潮呢?所以,與其將代碼建立于微軟的信任,還不如建立于我們的掌握之中。
  
  我們稍微回頭看看,為什么我們定義ms_pmpCriticalSection為指針,而不是直接作為普通變量?也就是說,為什么不直接這樣定義:
  static std::map<DWORD,CriticalSectionData> ms_mpCriticalSection;
  
  如果這樣定義,會有很大的風險。因為如果有一個類在構造函數調用了CLock::Create,而該類之后的對象又有一個靜態聲明,那么就會涉及到靜態變量初始化順序的不可控問題。因為在你調用CLock::Create的時候,ms_mpCriticalSection對象很有可能還有進行初始化。
  
  例如:
class CTest { public: CText(): m_dwLock(CLock::Create()) { } private: DWORD m_dwLock; };
    
//這里很可能會出錯,因為其構造函數調用了CLock::Create,而ms_mpCriticalSection很可能還沒有進行初始化 static CTest test;   


  為了避免靜態變量初始化導致的問題,我們只能采用new來進行分配。
  
  在這里還有一個小技巧,為了避免繁瑣的算法,我們直接采用了STL的map。這樣,在后續的查找中,我們就能比較輕松。
  
  既然返回的只是序號,那么我們的構造函數也必然需要進行相應的修改:
  CLock::CLock(DWORD dwIndex,BOOL *pRes = NULL): m_pcsCriticalSection(NULL) { //In order to make the source code simple, set the result as FALSE at first. if(pRes != NULL) { *pRes = FALSE; } m_pcsCriticalSection = GetObject(dwIndex); if(m_pcsCriticalSection != NULL) { if(pRes != NULL) { *pRes = TRUE; } InterlockedIncrement(&m_pcsCriticalSection->lLockCount); EnterCriticalSection(m_pcsCriticalSection->pCriticalSection); } }   

  從使用角度來說,我們只需要一個序號的形參即可。但我們想知道能不能成功進入臨界區,而構造函數又不能擁有返回值,所以我們就額外多增加了一個pRes形參,用來在函數返回后指明當前進入臨界區的狀況。
  
  GetObject是我們定義的一個函數,具體實現將在后面說明。現在只需要知道其實返回創建的一個臨界區數據。如果獲取一個臨界區數據對象不為NULL,那么我們在進入臨界區之前,先將lLockCount的計數增加1,標明當前進入臨界區的次數。
  
  其實很簡單,和之前我們的最簡單的構造函數相比,只是傳入的形參不同。而恰恰只是這一點不同,就能使我們的代碼臨界區有一個質的飛躍。
  
  再轉回頭,我們看看GetObject的實現:
CLock::CriticalSectionData* CLock::GetObject(DWORD dwIndex) { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return NULL; } std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->find(dwIndex); if(iter != ms_pmpCriticalSection->end()) { return &iter->second; } else { return NULL; } }   


  代碼并不復雜,只是從ms_pmpCriticalSection搜索出對應序號的數值,然后返回。如果該序號不存在,則返回NULL。
  
  到這里,使用上的功能我們基本上已經完成。但似乎還缺了點什么,對,沒錯,還缺刪除函數。刪除函數并不復雜,刪除臨界區后,然后調用delete刪除創建的棧,最后再從ms_pmpCriticalSection中刪掉相應的序號即可。但我們需要考慮到使用者的便利性,不僅可以刪除對應序號的對象,還能簡單地刪除所有。所以,對于刪除函數,我們定義兩個。而這兩個刪除函數,都應該通過不同的手法調用這個內部刪除函數:
   static BOOL CLock::Delete(const std::map<DWORD,CriticalSectionData>::iterator &iter) { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return FALSE; } if(iter == ms_pmpCriticalSection->end()) { return FALSE; } if(GetLockCount(iter->first) != 0) { ASSERT(FALSE); return FALSE; } if(iter->second.pCriticalSection == NULL) { return FALSE; } DeleteCriticalSection(iter->second.pCriticalSection); delete iter->second.pCriticalSection; return TRUE; }   

  形參是傳入一個迭代器,然后根據該迭代器做相應的操作。
  
  那么,我們public的刪除相應序號的函數可以如下:  
BOOL CLock::Delete(DWORD dwIndex) { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return FALSE; } std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->find(dwIndex); if(Delete(iter) != FALSE) { ms_pmpCriticalSection->erase(iter); CheckAndDeleteCriticalSection(); return TRUE; } else { return FALSE; } }   
  函數過程簡單明了,從通過find函數查找相應key的位置,然后傳遞給Delete函數。如果Delete返回值為TRUE,那么我們就通過erase擦除。我們之所以沒有在Delete(const std::map<DWORD,CriticalSectionData>::iterator &iter)函數中進行擦除,是因為map的迭代器,只要一刪除,就會失效,這對后續的操作有所不利。所以,我們只能根據其返回值再確定是否刪除。
  
  CheckAndDeleteCriticalSection()函數用來判斷ms_pmpCriticalSection是否為空,如果為空,直接調用delete刪除該指針:  
static void CLock::CheckAndDeleteCriticalSection() { if(ms_pmpCriticalSection->empty() != FALSE) { delete ms_pmpCriticalSection; ms_pmpCriticalSection = NULL; } }
  
  有了這些基礎,那么我們的刪除所有的函數就簡單了:
   static void CLock::DeleteAll() { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return; } for(std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->begin(); iter != ms_pmpCriticalSection->end(); ) { //The iterator would be destroy when you call erase,so I must call just as follows. if(Delete(iter) != FALSE) { ms_pmpCriticalSection->erase(iter ++); } else { ++ iter; } } CheckAndDeleteCriticalSection(); }   

  首先我們判斷ms_pmpCriticalSection是否為NULL,為NULL則什么都不做,返回。然后,再遍歷整個存儲空間,傳入其相應的迭代器進行操作。如果Delete返回不為FALSE,我們就調用erase進行刪除。
  
  在這里一個小細節需要留意,就是這段代碼:
  for(std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->begin(); iter != ms_pmpCriticalSection->end(); ) { //The iterator would be destroy when you call erase,so I must call just as follows. if(Delete(iter) != FALSE) { ms_pmpCriticalSection->erase(iter ++); } else { ++ iter; } }

  對于這段代碼,我們不能這么改寫:
  for(std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->begin(); iter != ms_pmpCriticalSection->end();++ iter ) { //The iterator would be destroy when you call erase,so I must call just as follows. if(Delete(iter) != FALSE) { ms_pmpCriticalSection->erase(iter); } }

  因為我們知道,map容器只要進行erase操作,那么相應的迭代器就會失效。如果采用的是后面一種寫法,那么我們調用erase操作后,iter就已經無效,循環中的iter就變成一個不可預料的操作。
  
  現在,就是完整羅列代碼的時候了:
  
  頭文件:
  #pragma once #include "Windows.h" #include <map> namespace Lock { const DWORD INVALID_INDEX = 0xFFFFFFFF; }; class CLock { public: //---------------------------------------------------------------------------------------- //Description: // Create the lock object and return the index //Return Values: // If the value is INVALID_INDEX, it means failed. Others is succeeded. //----------------------------------------------------------------------------------------- static DWORD Create(); //--------------------------------------------------------------------------------------------- //Description: // Delete all the created critical section.When you call the function,you must be sure that //there isn't other threads to enter the critical section.After succeed in calling the function, //the GetSize() returns 0, otherwise it doesn't delete all the critical section object. //--------------------------------------------------------------------------------------------- static void DeleteAll(); //--------------------------------------------------------------------------------------------- //Description: // Delete the created critical section on the index. //Parameters: // dwIndex : [in]The index of object to delete //Return Values: // FALSE means failed, maybe the index is locked. //--------------------------------------------------------------------------------------------- static BOOL Delete(DWORD dwIndex); //---------------------------------------------------------------------------------------- //Description: // Get the size of the the critical section //---------------------------------------------------------------------------------------- static DWORD GetSize(); //------------------------------------------------------------------------------------------------ //Description: // Get the lock count //Parameters: // dwIndex : [in] The index to check. //Return Values: // 0 means there is not the thread to lock the index of object or the index if invalid //Others means the count of lock //--------------------------------------------------------------------------------------------------- static LONG GetLockCount(DWORD dwIndex); //---------------------------------------------------------------------------------------- //Description: // The construct is used for enter the critical section //Parameters: // dwIndex : [in] The index to lock // pRes : [in] The result of locking. TRUE means succeeded, FALSE means failed. // If you don't want this value,you could set NULL. //---------------------------------------------------------------------------------------- CLock(DWORD dwIndex,BOOL *pRes = NULL); //---------------------------------------------------------------------------------------- //Description: // The destruct is used for leave the critical section //---------------------------------------------------------------------------------------- virtual ~CLock(); private: //---------------------------------------------------------------------------------------- //Description: // Add the critical section object to the table. //Parameters: // pcsCriticalSection : [in] The object to add. //Parameters: // Return the index in the table. //-------------------------------------------------------------------------------------- static DWORD AddTable(CRITICAL_SECTION* pcsCriticalSection); //---------------------------------------------------------------------------------------- //Description: // The struct value is for the internal value //---------------------------------------------------------------------------------------- struct CriticalSectionData { CRITICAL_SECTION *pCriticalSection; LONG lLockCount; }; //---------------------------------------------------------------------------------------- //Description: // Delete the object base on the iterator positon //Parameters: // iter : [in] The iterator to delete //----------------------------------------------------------------------------------------- static BOOL Delete(const std::map<DWORD,CriticalSectionData>::iterator &iter); //---------------------------------------------------------------------------------------- //Description: // Get the critical section object //Parameters: // dwIndex : [in] The index to get. //Return Values: // NULL means failed,others is succeeded. //---------------------------------------------------------------------------------------- static CriticalSectionData* GetObject(DWORD dwIndex); //---------------------------------------------------------------------------------------- //Description: // Check and delete the critical section which is allocate by new operate. //---------------------------------------------------------------------------------------- static void CheckAndDeleteCriticalSection(); private: static std::map<DWORD,CriticalSectionData> *ms_pmpCriticalSection; static DWORD ms_dwIndex; CriticalSectionData *m_pcsCriticalSection; };   
  
  .cpp實現文件:
    #include "Lock.h" //---------------------------------------------------------------------------------- //The static member std::map<DWORD,CLock::CriticalSectionData> * CLock::ms_pmpCriticalSection = NULL; DWORD CLock::ms_dwIndex = 0; //---------------------------------------------------------------------------------- CLock::CLock(DWORD dwIndex,BOOL *pRes): m_pcsCriticalSection(NULL) { //In order to make the source code simple, set the result as FALSE at first. if(pRes != NULL) { *pRes = FALSE; } m_pcsCriticalSection = GetObject(dwIndex); if(m_pcsCriticalSection != NULL) { if(pRes != NULL) { *pRes = TRUE; } InterlockedIncrement(&m_pcsCriticalSection->lLockCount); EnterCriticalSection(m_pcsCriticalSection->pCriticalSection); } } CLock::~CLock() { if(m_pcsCriticalSection != NULL) { LeaveCriticalSection(m_pcsCriticalSection->pCriticalSection); InterlockedDecrement(&m_pcsCriticalSection->lLockCount); } } DWORD CLock::Create() { CRITICAL_SECTION* pcsCriticalSection = new CRITICAL_SECTION(); if(pcsCriticalSection == NULL) { return Lock::INVALID_INDEX; } __try { InitializeCriticalSection(pcsCriticalSection); } __except(GetExceptionCode() == STATUS_NO_MEMORY) { //Failed to intialize the critical section, so delete the object created by new operate. delete pcsCriticalSection; return Lock::INVALID_INDEX; } return AddTable(pcsCriticalSection); } void CLock::DeleteAll() { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return; } for(std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->begin(); iter != ms_pmpCriticalSection->end(); ) { //The iterator would be destroy when you call erase,so I must call just as follows. if(Delete(iter) != FALSE) { ms_pmpCriticalSection->erase(iter ++); } else { ++ iter; } } CheckAndDeleteCriticalSection(); } CLock::CriticalSectionData* CLock::GetObject(DWORD dwIndex) { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return NULL; } std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->find(dwIndex); if(iter != ms_pmpCriticalSection->end()) { return &iter->second; } else { return NULL; } } DWORD CLock::GetSize() { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return 0; } return ms_pmpCriticalSection->size(); } DWORD CLock::AddTable(CRITICAL_SECTION* pcsCriticalSection) { if(ms_pmpCriticalSection == NULL) { ms_pmpCriticalSection = new std::map<DWORD,CriticalSectionData>(); if(ms_pmpCriticalSection == NULL) { return Lock::INVALID_INDEX; } else { ms_dwIndex = 0; } } CriticalSectionData newCriticalSectionData = {pcsCriticalSection,0}; InterlockedIncrement(reinterpret_cast<LONG *>(&ms_dwIndex)); ms_pmpCriticalSection->insert(std::make_pair(ms_dwIndex,newCriticalSectionData)); return ms_dwIndex; } BOOL CLock::Delete(DWORD dwIndex) { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return FALSE; } std::map<DWORD,CriticalSectionData>::iterator iter = ms_pmpCriticalSection->find(dwIndex); if(Delete(iter) != FALSE) { ms_pmpCriticalSection->erase(iter); CheckAndDeleteCriticalSection(); return TRUE; } else { return FALSE; } } BOOL CLock::Delete(const std::map<DWORD,CriticalSectionData>::iterator &iter) { if(ms_pmpCriticalSection == NULL) { ASSERT(FALSE); return FALSE; } if(iter == ms_pmpCriticalSection->end()) { return FALSE; } if(GetLockCount(iter->first) != 0) { ASSERT(FALSE); return FALSE; } if(iter->second.pCriticalSection == NULL) { return FALSE; } DeleteCriticalSection(iter->second.pCriticalSection); delete iter->second.pCriticalSection; return TRUE; } LONG CLock::GetLockCount(DWORD dwIndex) { CriticalSectionData *pCriticalSection = GetObject(dwIndex); if(pCriticalSection == NULL) { return 0; } else { return pCriticalSection->lLockCount; } } void CLock::CheckAndDeleteCriticalSection() { if(ms_pmpCriticalSection->empty() != FALSE) { delete ms_pmpCriticalSection; ms_pmpCriticalSection = NULL; } }   


  簡單地調用示范如下:
   //獲取相應的序號 const DWORD dwIndex = CLock::Create(); //進入臨界區 CLock lock(dwIndex); //刪除相應的臨界區 CLock::Delete(dwIndex);

總結

以上是生活随笔為你收集整理的如何写优雅的代码(5)——远离临界区噩梦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲另类人人澡 | 一本一道久久a久久综合蜜桃 | 日韩av有码在线 | 免费视频久久久久 | 福利久久久 | 国产精品中文字幕在线播放 | 色多多在线观看 | 国内精品久久久精品电影院 | 日韩激情网 | 欧美另类调教 | 青草视频在线 | 欧美一级电影片 | 国产精品成人免费精品自在线观看 | 免费黄在线观看 | 日韩精品在线免费播放 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | www.夜夜干.com| 欧美日韩国产成人 | 国产精品久久久久久久免费 | 日韩黄在线观看 | 九草视频在线 | 一区三区视频在线观看 | 日韩高清在线不卡 | 正在播放五月婷婷狠狠干 | 中文字幕在线观看不卡 | 三三级黄色片之日韩 | 国产97免费 | 91你懂的 | 在线视频你懂 | 久久婷婷久久 | 欧美大片第1页 | 三级av免费看 | 国产成人精品一区在线 | 蜜臀av一区二区 | 在线免费观看黄色大片 | 久久天天躁夜夜躁狠狠躁2022 | 久久成人久久 | 欧美日韩超碰 | 国产精品video爽爽爽爽 | 久久视频在线 | 美女久久一区 | 日韩毛片在线一区二区毛片 | 国产中文伊人 | 五月天综合网 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 狠狠狠狠狠色综合 | 国产字幕av| 色综合五月天 | 国产日韩亚洲 | 久久再线视频 | 91污在线| 在线免费观看国产 | 久久夜色电影 | 国产xxxx性hd极品 | 免费欧美 | 亚洲免费精品一区二区 | 99久久婷婷国产综合精品 | 欧美精品中文字幕亚洲专区 | 免费看国产一级片 | 一区二区不卡视频在线观看 | 99婷婷狠狠成为人免费视频 | 日韩一区二区免费视频 | 午夜电影 电影 | 日韩中文在线电影 | 欧美日韩三区二区 | 国产99久久精品一区二区300 | 欧洲精品视频一区二区 | 久久久久综合 | 丝袜网站在线观看 | 亚洲精品成人av在线 | 天堂av最新网址 | 伊色综合久久之综合久久 | 欧美日在线 | 欧美亚洲成人免费 | 一级黄网 | 五月婷婷视频 | 黄色av网站在线观看免费 | 天干啦夜天干天干在线线 | 免费久久99精品国产婷婷六月 | 久久观看最新视频 | 99精品在线 | 三级免费黄 | 日韩高清www | 黄色毛片在线观看 | 国内成人精品2018免费看 | 97麻豆视频| 97视频免费播放 | 免费av的网站 | 国产精品大片在线观看 | 91中文字幕网 | 国产视频一二三 | 成人午夜免费剧场 | 手机看片1042 | 国产大尺度视频 | 一本色道久久综合亚洲二区三区 | 亚洲国产精品久久久 | 日韩天天干 | 黄色免费看片网站 | 手机av在线不卡 | 欧美a级一区二区 | 亚洲精品在线免费观看视频 | 欧美日韩国产精品一区二区亚洲 | 精品欧美在线视频 | 免费碰碰 | 精精国产xxxx视频在线播放 | 亚洲国产中文字幕在线观看 | 午夜免费电影院 | 天天草天天干天天射 | 免费一级片在线 | 成年人视频在线免费观看 | 久久精品视频播放 | 激情视频一区二区三区 | 99视频精品全国免费 | 国产精品美女久久久久久 | 亚洲精品美女免费 | 激情中文在线 | 欧美电影在线观看 | 视频一区二区在线 | 国产日韩欧美在线观看 | 久久午夜国产精品 | 国产一级二级在线播放 | 人人爱爱| 久久久久高清毛片一级 | 国产精品一区二区美女视频免费看 | 日韩欧美视频在线 | 在线观看视频在线观看 | 国产精品久久久久aaaa九色 | 狠狠狠狠狠狠狠狠 | 亚洲精品美女久久17c | 精品久久91 | 三级av在线播放 | 国产精品 日韩精品 | 狠狠色丁香婷婷综合基地 | 国偷自产中文字幕亚洲手机在线 | 97看片 | 久久在线视频精品 | 最新日韩在线观看视频 | 久久成人国产精品免费软件 | 91完整版| 91豆花在线 | 高清av免费一区中文字幕 | 久久免费视频精品 | 狠狠干电影 | 97在线观看免费观看 | 91成人网页版 | 在线免费观看视频一区二区三区 | 五月天精品视频 | 99视频这里有精品 | av日韩在线网站 | 天天干天天干 | 日产乱码一二三区别免费 | 欧美极品一区二区三区 | 免费观看福利视频 | 精品一区二区综合 | www九九热| 最新av网址在线 | 国产在线一区观看 | 国内久久精品视频 | 国产伦理一区二区三区 | 成人丝袜 | 亚洲成年人在线播放 | 色综合久久99 | 国产精品自在欧美一区 | www在线观看视频 | 韩国av一区 | 精品久久久久久国产偷窥 | 亚洲成人免费 | 99久久久国产精品免费99 | 在线视频国产区 | 国产精品久久久久久久av电影 | av在线看片| 精品福利网 | 国产日韩中文在线 | 狠狠狠干| 色综合久久中文综合久久牛 | 国产美女免费 | 99在线看 | 欧美做受高潮电影o | 久久综合九色综合久99 | 亚洲免费一级电影 | 欧美精品久久久久久久久老牛影院 | 探花视频网站 | 九九免费在线观看视频 | 美女黄频网站 | 国产麻豆视频在线观看 | 丁香花中文字幕 | 中文字幕乱码一区二区 | 亚洲国产中文字幕在线观看 | 日韩在线观看视频免费 | 国产精品久久久久久久久久久久午 | 91精品国产99久久久久久红楼 | 久久一区二区三区日韩 | 免费三级黄 | 国产成人免费高清 | 激情网站五月天 | 国产精品中文 | av在线看片 | av在线播放亚洲 | 在线99视频| 成人永久视频 | 国偷自产视频一区二区久 | 三级av网| 久久国产精品影视 | 97视频在线观看播放 | 成人小视频在线观看免费 | 日日骑 | 亚洲天堂精品 | 美女国内精品自产拍在线播放 | 久久亚洲精品国产亚洲老地址 | 日日夜夜操操操操 | 成人av午夜 | 欧美午夜久久久 | 四虎影视成人永久免费观看亚洲欧美 | 久久99久久99精品免费看小说 | 久久99精品波多结衣一区 | 日韩视频一区二区三区在线播放免费观看 | 国外av在线 | 久草在线免费色站 | 91精品啪| 日韩视频一区二区在线 | 精精国产xxxx视频在线播放 | 免费在线观看一区 | 999精品视频| 超碰人人乐 | 国产精品一区二区久久 | 久久久免费网站 | 香蕉影视| 一区二区三区免费在线 | 国产高清视频在线免费观看 | 91视频一8mav | 亚洲精品国偷自产在线91正片 | 国产一级精品视频 | 中文字幕亚洲在线观看 | 亚洲国产婷婷 | 中文字幕av有码 | 成人91在线观看 | 久久艹影院| 亚洲高清在线视频 | 久久久久亚洲精品国产 | 色a综合| 视频91在线| 黄色精品在线看 | 免费日韩av电影 | 丝袜av一区| www.伊人网| 久久99视频精品 | 91九色最新地址 | 中文字幕一区二区在线观看 | 五月激情亚洲 | 色婷婷视频网 | 久久九九网站 | 国产精品99久久久久久武松影视 | 国产中文字幕视频在线观看 | 999视频网站 | a黄色大片 | 黄色软件在线观看 | 天天色天天骑天天射 | 不卡视频在线看 | 天天干天天操天天 | 狠狠狠色丁香综合久久天下网 | 亚洲欧美国产日韩在线观看 | 久久电影中文字幕视频 | 亚洲综合欧美激情 | 色婷久久 | 99视频国产精品 | av免费观看网站 | 草久在线观看视频 | 正在播放国产一区二区 | 99久高清在线观看视频99精品热在线观看视频 | av久久久久久 | 国产高潮久久 | 国产成人不卡 | 久草网站 | 亚洲天堂网在线观看视频 | 韩国av免费观看 | 69av在线视频 | 亚洲综合在线五月 | 99 久久久久 | 亚洲三级性片 | 欧美日韩国产成人 | 九九热精品国产 | av在线一 | 五月香视频在线观看 | 国产精品2018 | 中文字幕在线观看免费高清电影 | 国产一级免费观看视频 | 成人小电影在线看 | 久久久久久国产精品久久 | 黄色av网站在线观看免费 | 精品一区二区免费在线观看 | 99精品国产亚洲 | 国产精品久久av | 国产91全国探花系列在线播放 | 欧美日韩亚洲精品在线 | 18岁免费看片 | 天天草综合网 | 一级片免费视频 | 美腿丝袜av | 又黄又爽又色无遮挡免费 | 91av色| 日韩在线中文字幕 | 福利视频区 | 蜜臀久久99精品久久久酒店新书 | av不卡网站 | 国产手机在线精品 | 在线观看国产区 | 在线国产99 | 成人h电影 | 国产中文字幕一区二区 | 中文字幕色综合网 | 国产丝袜 | 免费色视频 | 狠狠狠色丁香婷婷综合久久88 | 日韩欧美国产成人 | 日韩一区二区三区在线观看 | 青青色影院 | 婷婷午夜| 国产视频综合在线 | 久久涩视频| 91精品国产亚洲 | 久久伦理影院 | 五月婷婷毛片 | 久久一区精品 | av久久在线 | 国产最新在线 | 99色国产 | 国产三级香港三韩国三级 | 97视频免费在线 | 天天干天天综合 | 精品一区二区三区在线播放 | 不卡av在线免费观看 | 欧美日韩视频在线一区 | 91精品国产福利在线观看 | 欧美日韩视频在线观看一区二区 | 五月婷影院 | 99久久精品国产一区 | 国产一区视频在线播放 | 国产中文字幕精品 | 一二区电影| 99综合视频| 日韩电影久久 | 欧美日韩国产精品一区二区 | 欧美另类网站 | 亚洲精品美女在线观看 | 亚洲视频观看 | 精品国产色 | 91高清一区 | 久久久精品亚洲 | 一区二区三区在线免费观看 | 日日日日日 | 狠狠插天天干 | 国产日韩三级 | 亚洲视屏 | 国产精品va | 日本久久久久久久久 | 天天摸日日操 | 中文字幕人成不卡一区 | 色天天久久 | 久久五月精品 | 国产一级高清 | 99 视频 高清 | 亚洲午夜久久久久久久久电影网 | 亚洲免费在线播放视频 | 欧美亚洲精品一区 | 欧美日韩在线观看不卡 | 国产精品久久久久久久久毛片 | 韩日视频在线 | 四虎影视精品永久在线观看 | 亚洲激情 在线 | 亚洲精品播放 | 久久人人爽 | 国产精品密入口果冻 | 天天色宗合 | 九九导航| 亚洲一级片免费观看 | 麻豆国产露脸在线观看 | 日本久久99 | 综合色播| 亚洲经典中文字幕 | 日韩av福利在线 | 天天色天天操综合 | 涩涩资源网 | 久久久久免费视频 | 中午字幕在线 | 日韩精品在线一区 | av网址在线播放 | 日本精品va在线观看 | 婷婷新五月 | 丁香激情视频 | 又爽又黄在线观看 | 久久久精品一区二区 | 国产精品国产三级国产专区53 | 成人在线视频你懂的 | 久久视频99 | 久久久免费精品视频 | 视频三区 | 中文永久免费观看 | 国产成人精品久 | 久久久国产精品免费 | 天天天天色综合 | 中文字幕资源在线 | 天天摸天天舔天天操 | 91免费网址 | 欧美一区二区精品在线 | 一区二区三区电影大全 | 最近免费中文视频 | av东方在线 | 亚洲欧美国产精品 | 精品高清视频 | 日韩三级一区 | 97手机电影网 | 婷婷亚洲综合 | 日韩成人看片 | 亚洲视频大全 | 粉嫩av一区二区三区入口 | 97看片| 国产黄色免费看 | 免费在线播放av电影 | av在线播放快速免费阴 | 深爱激情开心 | 国产一级二级在线观看 | 成人免费观看大片 | 精品国产欧美一区二区 | 一区二区不卡 | 天天色天天爱天天射综合 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 久在线观看视频 | 国产99久久精品一区二区300 | 国产手机视频 | 91视频首页 | 视频成人免费 | 久草在线视频免赞 | 在线播放视频一区 | 国产中文字幕在线观看 | 亚洲精品91天天久久人人 | 97在线免费 | 日日操夜| 亚洲精品美女在线观看 | 最新av网站在线观看 | 欧美日韩一级视频 | 国产精彩在线视频 | 国产精品2018 | 成人a级网站 | 亚洲资源 | 91色国产在线 | 97国产精品亚洲精品 | 成人久久18免费网站 | 天堂网av 在线 | 国产精品99久久久久久小说 | 超碰人人在线观看 | 亚洲国产网站 | 成人国产精品一区 | 丁香花在线视频观看免费 | japanesexxx乱女另类 | 久久久久久久久免费视频 | 天天综合网久久综合网 | aaaaaa毛片| 免费日韩 精品中文字幕视频在线 | 午夜成人免费电影 | 四虎国产精品免费观看视频优播 | 91在线九色 | 92国产精品久久久久首页 | 2022久久国产露脸精品国产 | 国产美女精品视频免费观看 | 日韩va欧美va亚洲va久久 | 免费看片成年人 | 国产高清在线观看 | 免费观看9x视频网站在线观看 | 成人免费av电影 | 国产精品久久久久久久午夜 | 久草免费色站 | a天堂最新版中文在线地址 久久99久久精品国产 | 久草在线高清视频 | 色av资源网 | 中文字幕一区二区三区四区在线视频 | 国内成人精品2018免费看 | 精品久久久久一区二区国产 | 国产成人精品亚洲a | 欧美激情xxxx性bbbb | 韩国在线视频一区 | 伊人va | 亚洲精品乱码久久久久久 | 久久影院亚洲 | 亚洲国产片 | 开心激情五月婷婷 | 日日干 天天干 | 亚洲欧美日韩一级 | 日韩欧美在线综合网 | 国产一区二区三区久久久 | 中国一级片在线观看 | 又黄又爽的视频在线观看网站 | 成人动漫精品一区二区 | 在线观看中文av | 欧美一区中文字幕 | 欧美日韩在线观看一区二区三区 | 精品视频一区在线观看 | 99久久久国产精品 | 久精品在线观看 | 久久久国产一区 | 亚洲国产精彩中文乱码av | 久草干| 亚洲第一av在线播放 | 久久精品三 | 麻豆视频在线播放 | 视频在线观看一区 | 久久无码av一区二区三区电影网 | 亚洲国内在线 | 中文视频在线播放 | 最近中文字幕国语免费av | 麻豆视频在线观看免费 | 成年人免费电影在线观看 | 97精品国产91久久久久久久 | 青春草免费视频 | 特级毛片爽www免费版 | 久色 网 | 中文在线字幕免费观看 | 中文字幕一区二区三区四区视频 | 精品久久久久久久久久 | 免费麻豆视频 | 国产一区视频免费在线观看 | 日日摸日日爽 | 天堂av在线免费观看 | 欧美精品久久久久久久久久白贞 | 色播激情五月 | 久草在线免费在线观看 | 日韩高清在线看 | 国产精品日韩在线 | 国产精品视频久久久 | 亚洲精品乱码久久久久久写真 | 国产一级电影免费观看 | 国产日产在线观看 | 成人免费视频网站 | 丁香婷婷综合网 | 日韩精品一区二区免费视频 | av在线观| 欧美射射射| 激情欧美丁香 | 免费看黄电影 | av一级在线观看 | 日日插日日干 | 在线蜜桃视频 | 亚洲在线视频播放 | 成人一区二区三区在线 | 国产污视频在线观看 | 亚洲一区二区三区四区精品 | 在线成人观看 | 亚洲特级片| 九九精品视频在线观看 | 久久精品一区二区三区视频 | 久久精品一区二区三区中文字幕 | 69视频在线 | 亚洲伊人成综合网 | 色综合久久综合中文综合网 | 精品国产1区二区 | 在线观看理论 | 99热在线精品观看 | 中文字幕有码在线观看 | 九九亚洲精品 | 91在线中文字幕 | 日韩高清成人 | 国产成人久久精品 | 免费人成在线观看 | 亚洲午夜大片 | 伊人手机在线 | 日韩电影精品一区 | 五月婷丁香| 国产无套精品久久久久久 | 黄色a视频 | 欧美成人性网 | 免费在线播放av电影 | 亚洲国产精品传媒在线观看 | 国产精品视频观看 | 激情五月婷婷丁香 | 又色又爽又黄高潮的免费视频 | 91九色丨porny丨丰满6 | 国产伦精品一区二区三区无广告 | 三上悠亚一区二区在线观看 | 精品亚洲一区二区三区 | 91中文字幕在线视频 | 精品国产诱惑 | 中文在线字幕免费观看 | 伊人久久电影网 | 成人中文字幕+乱码+中文字幕 | 永久免费在线 | 黄色成年网站 | 人操人| 久久观看免费视频 | 久久精品三 | 日本黄色大片免费看 | 国产高清在线a视频大全 | 中文字幕免费 | 日韩av成人| 国产无遮挡猛进猛出免费软件 | 美女久久久久久久久久久 | 天天摸天天舔 | 在线小视频| 天天干天天拍天天操 | 色婷婷欧美| 免费看片日韩 | 久久伊人精品一区二区三区 | 91.dizhi永久地址最新 | 国产精品女同一区二区三区久久夜 | 欧美色一色 | 最近更新的中文字幕 | 国产在线观看你懂得 | 永久免费毛片 | 久久成人免费 | 精品免费视频123区 午夜久久成人 | 91在线91 | 久久久综合九色合综国产精品 | 五月婷婷狠狠 | 日韩在线第一区 | 精品国产一区二区三区四区在线观看 | www.伊人网.com | 999久久久久久久久6666 | 国产一级精品绿帽视频 | 在线色视频小说 | 欧美日韩一区二区在线 | 大片网站久久 | 日日操夜 | 91精品久久久久久综合五月天 | 毛片一区二区 | 亚洲精品乱码久久久久v最新版 | 日韩视频在线一区 | 99精品视频精品精品视频 | 毛片精品免费在线观看 | 天天操 夜夜操 | 欧美一级特黄高清视频 | 国产视频高清 | 久久99国产一区二区三区 | 在线观看av中文字幕 | www.久久com| 视频在线观看一区 | 国产免费a | 99精品热 | www黄免费 | 亚洲永久精品在线 | 九九免费在线看完整版 | 麻豆一区在线观看 | 911国产 | 中文字幕黄色 | 美女久久视频 | 午夜精品久久久久久久99无限制 | 久久高清国产视频 | 97精品国产手机 | 久久99久久久久久 | 日韩免费看的电影 | 天天艹天天爽 | 亚洲经典视频在线观看 | 99热免费在线 | 天天操天天摸天天爽 | 日本大片免费观看在线 | 日韩视频免费 | 欧美亚洲免费在线一区 | 一级黄色片在线免费观看 | 国色综合 | 91成人精品一区在线播放69 | 97超视频免费观看 | 在线播放 日韩专区 | 精品91| 新av在线 | 成人久久免费视频 | 精品91视频| 一本一本久久a久久精品综合 | a级片久久| 精品亚洲一区二区三区 | 午夜精品一区二区三区在线视频 | 国产一区二区三区四区在线 | 国产视频91在线 | 天天综合久久 | 99视频在线精品免费观看2 | 精品在线观看免费 | 午夜视频在线观看一区二区 | 成人毛片网 | 亚洲国产中文字幕在线视频综合 | 日韩精品第1页 | 五月婷婷色综合 | 色丁香综合 | 91亚洲精品久久久蜜桃借种 | 天天操天天干天天 | 国产日韩精品久久 | av在线电影播放 | 免费亚洲精品视频 | 久久久综合精品 | 99精品视频免费看 | av大片免费 | 亚洲成av人影院 | 国产黄色成人av | 91欧美国产 | 国产精品美女网站 | 国产精品美女久久久久久网站 | 黄色的视频网站 | 国内免费久久久久久久久久久 | 在线v片免费观看视频 | 激情 一区二区 | 91精品在线免费视频 | 91女神的呻吟细腰翘臀美女 | 成人一区二区在线观看 | 天天操夜夜操夜夜操 | 最近日本mv字幕免费观看 | 日韩网站中文字幕 | 国产亚洲日本 | 菠萝菠萝蜜在线播放 | 一区二区精品在线 | 99久久综合精品五月天 | 亚洲另类视频在线 | 欧美在线不卡一区 | 免费在线观看日韩欧美 | www久久com| 日韩av一卡二卡三卡 | 五月激情丁香婷婷 | 成人免费观看网址 | 久久高清国产视频 | 亚洲激情综合网 | 国产午夜精品一区二区三区嫩草 | 亚洲区精品 | 国产精品国内免费一区二区三区 | 91中文字幕在线视频 | 国产小视频免费在线观看 | 欧美高清成人 | 国产日韩精品一区二区在线观看播放 | 午夜av免费在线观看 | 91亚洲国产成人久久精品网站 | 国产五月色婷婷六月丁香视频 | 国产乱对白刺激视频不卡 | 黄色的视频网站 | 中文字幕在线观看你懂的 | 免费在线观看av的网站 | 在线观看自拍 | 国产一区二区手机在线观看 | 日韩精品最新在线观看 | 国产手机视频在线播放 | sm免费xx网站 | 99在线免费视频 | 国产精品久久久久久久久费观看 | 大型av综合网站 | 伊人久久在线观看 | 久久国产精品免费看 | 在线探花 | 97视频在线观看视频免费视频 | 国产精品国产亚洲精品看不卡15 | 国产成人综合图片 | 日本中文在线观看 | 欧美尹人| 亚洲国产精品va在线 | 久久国产日韩 | 国产精品免费在线播放 | 美女福利视频在线 | 国产精品美女久久久 | 最近中文字幕在线中文高清版 | 国产不卡网站 | 国产1级毛片 | 久久久久久久久久久国产精品 | 操操综合网 | 精品一区在线看 | 四虎免费在线观看视频 | 国产精品24小时在线观看 | 欧美国产日韩在线观看 | 国产一级在线观看 | 国产视频2 | 国产99亚洲| 99在线精品视频在线观看 | 久久国产精品免费一区 | 国产精品国产三级国产不产一地 | 日韩精品久久中文字幕 | 夜夜操天天干, | 日韩午夜精品 | 久久av在线播放 | 亚洲国产免费网站 | 亚洲乱亚洲乱亚洲 | 蜜臀aⅴ国产精品久久久国产 | 国产.精品.日韩.另类.中文.在线.播放 | 日韩激情影院 | 婷婷av网站 | 99热在线观看免费 | 99福利片| 欧美日韩在线视频观看 | www.黄色小说.com| 亚洲1级片| 五月激情视频 | 欧美激情一区不卡 | 国产91精品在线播放 | 黄色在线观看免费网站 | 成人黄色短片 | 亚洲人毛片 | 丁香激情综合国产 | 久草视频2| 久久国产精品99精国产 | 伊人天天操 | 日本九九视频 | 国产精品6999成人免费视频 | 国产亚洲人 | 91av手机在线 | 欧美成人精品在线 | 中文视频在线 | 成年人电影毛片 | 99精品在线直播 | 六月激情 | 久久久久亚洲天堂 | 在线电影中文字幕 | 国产不卡av在线 | 久久福利在线 | 黄色软件在线看 | 欧美激情第28页 | 五月婷婷丁香六月 | 日韩欧美视频一区 | www.夜夜操.com| 久久亚洲精品电影 | 狠狠干天天射 | 亚洲精品久久久蜜臀下载官网 | 嫩草av在线 | 天天干视频在线 | 亚洲国产中文字幕 | 99激情网 | 深爱五月激情网 | 国产一区视频在线观看免费 | 国产日韩欧美视频在线观看 | 日韩在线观看a | 日韩欧美大片免费观看 | 在线观看免费91 | 日韩精品一卡 | 午夜精品一区二区三区在线视频 | 欧美久久久久久久久久久久久 | 欧美在线free | 我要色综合天天 | 国产高清精品在线 | 国产精品不卡一区 | 午夜精品久久久久久久久久久久 | 亚洲日本va在线观看 | 免费av的网站 | 在线观看亚洲视频 | 国产精品久久久久久久久大全 | 日韩黄色一区 | 超碰在线97免费 | 欧美精品乱码99久久影院 | 久久亚洲美女 | 91精品国自产拍天天拍 | 丁香六月激情婷婷 | 久久香蕉一区 | 69xxxx欧美 | 色多多在线观看 | 日韩大片在线 | 国产在线不卡精品 | 97免费在线观看 | 一区二区视频在线免费观看 | 欧美日韩亚洲在线 | 久久五月婷婷丁香 | 国产精品免费不卡 | 国产精品永久久久久久久www | av再线观看| 日韩亚洲欧美中文字幕 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 丁香九月激情综合 | 在线观看国产www | 久草在线最新视频 | 久久久久久久久久久影视 | 狠狠狠狠狠狠狠 | 一二三久久久 | 二区在线播放 | 亚洲影院一区 | 9色在线视频 | 免费www视频 | 国产你懂的在线 | 天天综合久久综合 | 五月婷婷一区二区三区 | 日韩三级久久 | 中文在线免费视频 | 精品国产一区二区三区四 | 免费三级a | 日日夜夜人人精品 | 精品一二三区 | 亚洲最新在线 | 久久综合影音 | 国产一级高清视频 | 婷婷五月色综合 | 亚洲国产中文字幕 | av色图天堂网 | 91精品啪在线观看国产线免费 | 久产久精国产品 | 九九在线播放 | 欧美一级免费高清 | 成人免费观看大片 | 狠狠色丁香婷婷综合久小说久 | 午夜视频在线观看一区二区三区 | 91精品国产自产在线观看永久 | 欧美怡红院视频 | 97日日碰人人模人人澡分享吧 | 欧美午夜性生活 | 婷婷丁香在线观看 | 国产在线中文 | 久久综合天天 | 超碰97免费在线 | 免费看黄20分钟 | 婷婷 中文字幕 | 福利片免费看 | 91大神一区二区三区 | 人成在线免费视频 | 日韩精品一区二区三区视频播放 | 亚洲国产经典视频 | 91成人免费视频 | 欧美成人一区二区 | 在线免费观看国产 | 69国产精品视频免费观看 | 国产视频中文字幕在线观看 | 久草www | 国产1区在线观看 | 丁香综合网 | 国产精品电影在线 | 久久久免费看视频 | 在线观看免费成人 | 国产精品久久久久久婷婷天堂 | 一级理论片在线观看 | 日韩在线视频二区 | 99热这里只有精品国产首页 | 9992tv成人免费看片 | 国产破处在线播放 | 婷婷激情五月 | 久久久久久久久精 | 国产精品久久久一区二区三区网站 | 国产一级片不卡 | 91在线视频免费 | 91麻豆操| 免费在线观看av的网站 | 国产原创av片 | 99久久99久久精品 | 中文字幕av在线电影 | 国产乱码精品一区二区三区介绍 | 亚洲午夜av久久乱码 | 在线观看av黄色 | 日韩和的一区二在线 | 日韩美女av在线 | 久久久免费 | 日本精品视频在线观看 | 丁香六月婷婷激情 | 日韩在线理论 | 美女视频一区 | 蜜臀av免费一区二区三区 | 亚洲精品国产综合99久久夜夜嗨 | 亚洲午夜久久久久 | 免费视频成人 | 亚洲人成免费 | 国产精品免费久久久久久久久久中文 | 国产精品中文字幕在线观看 | 奇米先锋 | 亚洲人人av | 日韩高清在线不卡 | 日本婷婷色 | av电影久久| 国产美女精品人人做人人爽 | 久久一区二区三区超碰国产精品 | 精品人妖videos欧美人妖 | 香蕉精品视频在线观看 | 国产精品久久久久av | 波多野结衣综合网 | 久久草在线免费 | 久久久免费 | 夜夜夜草 | 国产超碰在线观看 | 99九九免费视频 | 精品亚洲va在线va天堂资源站 | 色在线国产| 免费在线观看国产黄 | 午夜手机电影 | 丰满少妇麻豆av | 99视频+国产日韩欧美 | www.久久成人 | 黄色片网站免费 | 欧美地下肉体性派对 | 欧美韩日精品 | 国产精品久久久久久久毛片 | 五月天久久久久久 | 久久久国产精品人人片99精片欧美一 | 精品在线一区二区 | 综合网在线视频 | 久久99操| 综合五月 | 日韩精品视频在线观看网址 | 久久成人亚洲欧美电影 | 久草视频国产 | 国产 中文 日韩 欧美 | 六月激情久久 | 国产一级久久 | 久久精品一区二区三区四区 | 亚洲精品影院在线观看 | av在线播放观看 | 999视频网| 欧美精品久久久久久久久免 | 亚洲日本一区二区在线 | 97视频人人澡人人爽 | 伊人五月天.com | 国产精品久久久区三区天天噜 | 久久久久久久久久久免费 | 摸阴视频| 国产亚洲人成网站在线观看 | 国产精品av免费 | 国产精品久久久久久久久久久杏吧 | 四虎成人免费观看 | 亚洲视频一区二区三区在线观看 |