青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Kisser Leon

這個(gè)kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0

#include <stdio.h>
#include <windows.h>

const int numThreads = 3;

?

DWORD WINAPI helloFunc(LPVOID pArg)

{

?????? int num = (int) pArg;

?????? printf("Hello Thread %d\n", num);

??????

?????? return 0;

}

?

int main()

{?????

?????? HANDLE hThread[numThreads];

?

?????? for (int i = 0; i < numThreads; i++)

?????? {

????????????? hThread[i] = CreateThread(NULL, 0, helloFunc, (LPVOID)i, 0, NULL);

?????? }

?

?????? WaitForMultipleObjects(numThreads, hThread, TRUE, INFINITE);

?

?????? return 0;

}

?

上面可以說(shuō)是一個(gè)最簡(jiǎn)單的多線程程序了。

運(yùn)行時(shí)庫(kù)選項(xiàng):

(1) ????? 單線程調(diào)試 (/MLd)

(2) ????? 多線程調(diào)試 DLL (/MDd)

(3) ????? 多線程調(diào)試 (/MTd)

上面三個(gè)是 debug 版本的,還有與它們相對(duì)的三個(gè) release 版本等。

由于一開(kāi)始的時(shí)候系統(tǒng)默認(rèn)的是 /MLd ,所以產(chǎn)生一些很有意思的問(wèn)題,比如說(shuō)有些線程 的線程函數(shù)會(huì)被執(zhí)行多次:

Hello Thread 1

Hello Thread 1

Hello Thread 0

Hello Thread 2

Press any key to continue

線程 1 被執(zhí)行了兩次!

Hello Thread 0

Hello Thread Hello Thread 1

Hello Thread Hello Thread 1

2

Press any key to continue

這個(gè)就更奇怪了!雖然是因?yàn)橛?/span> race condition 在,但是為什么會(huì)多出一個(gè) Hello Thread 呢( 5 個(gè) Hello Thread 4 個(gè)數(shù)字)?那就只有一個(gè)原因,有一個(gè)數(shù)字被覆蓋了(難道會(huì)有可能沒(méi)來(lái)得及輸出嗎?)!

Intel Thread Checker 進(jìn)行 check 的時(shí)候,會(huì)發(fā)生下面這樣的問(wèn)題,甚是奇怪!

圖片傳不上來(lái)。下次再傳。終于上傳成功了,娃哈哈
P1.bmp


碰到這么多問(wèn)題,因?yàn)榕际浅鯇W(xué)者,所以就一直沒(méi)有察覺(jué)出來(lái)編譯選項(xiàng)設(shè)置有問(wèn)題。而且我一直覺(jué)得都是對(duì)的。只是對(duì)其中的一個(gè)線程的線程函數(shù)為什么會(huì)執(zhí)行兩遍感覺(jué)很
confuse WHY WHY WHY Google 一個(gè)線程的線程函數(shù)是否可以執(zhí)行兩遍,找不到有用的咚咚! Baidu 也沒(méi)有相關(guān)信息。哭。只能暫時(shí)放棄,不過(guò)我始終還是不明白一個(gè)線程的線程函數(shù)為什么可以執(zhí)行多次?我也沒(méi)有見(jiàn)過(guò)這樣的例子。可能這個(gè)問(wèn)題在俺腦子里走太多路了,今天突發(fā)奇想,會(huì)不會(huì)是編譯選項(xiàng)有問(wèn)題?檢查了一下才發(fā)現(xiàn)原來(lái)一開(kāi)始忘了把它設(shè)為多線程的了,設(shè)回來(lái)之后就一切正常了,試了 N 多次都沒(méi)有碰到過(guò)問(wèn)題(雖然這不能證明肯定沒(méi)有問(wèn)題!線程執(zhí)行順序是不可預(yù)料的!要看 CPU 的心情的, J )。

?

Next, 接下來(lái)查一下編譯器相關(guān)資料。

Multithreaded Libraries Performance?

The single-threaded CRT is no longer in vs2005 available. This topic discusses how to get the maximum performance from the multithreaded libraries.

The performance of the multithreaded libraries has been improved and is close to the performance of the now-eliminated single-threaded libraries. For those situations when even higher performance is required, there are several new features.

·???????? Independent stream locking allows you to lock a stream and then use _nolock Functions that access the stream directly. This allows lock usage to be hoisted outside critical loops.

·???????? Per-thread locale reduces the cost of locale access for multithreaded scenarios (see _configthreadlocale).

·???????? Locale-dependent functions (with names ending in _l) take the locale as a parameter, removing substantial cost (for example, printf, _printf_l, wprintf, _wprintf_l).

·???????? Optimizations for common codepages reduce the cost of many short operations.

·???????? Defining _CRT_DISABLE_PERFCRIT_LOCKS forces all I/O operations to assume a single-threaded I/O model and use the _nolock forms of the functions. This allows highly I/O-based single-threaded applications to get better performance.

·???????? Exposure of the CRT heap handle allows you to enable the Windows Low Fragmentation Heap (LFH) for the CRT heap, which can substantially improve performance in highly scaled scenarios.

?

運(yùn)行時(shí)庫(kù)是程序在運(yùn)行時(shí)所需要的庫(kù)文件 ,通常運(yùn)行時(shí)庫(kù)是以 LIB DLL 形式提供的。 C 運(yùn)行時(shí)庫(kù)誕生于 20 世紀(jì) 70 年代,當(dāng)時(shí)的程序世界還很單純,應(yīng)用程序都是單線程的,多任務(wù)或多線程機(jī)制在此時(shí)還屬于新觀念。所以這個(gè)時(shí)期的 C 運(yùn)行時(shí)庫(kù)都是單線程的。

隨著操作系統(tǒng)多線程技術(shù)的發(fā)展,最初的 C 運(yùn)行時(shí)庫(kù)無(wú)法滿(mǎn)足程序的需求,出現(xiàn)了嚴(yán)重的問(wèn)題。 C 運(yùn)行時(shí)庫(kù)使用了多個(gè)全局變量(例如 errno )和靜態(tài)變量,這可能在多線程程序中引起沖突。假設(shè)兩個(gè)線程都同時(shí)設(shè)置 errno ,其結(jié)果是后設(shè)置的 errno 會(huì)將先前的覆蓋,用戶(hù)得不到正確的錯(cuò)誤信息。

  因此, Visual C++ 提供了兩種版本的 C 運(yùn)行時(shí)庫(kù)。一個(gè)版本供單線程應(yīng)用程序調(diào)用,另一個(gè)版本供多線程應(yīng)用程序調(diào)用。多線程運(yùn)行時(shí)庫(kù)與單線程運(yùn)行時(shí)庫(kù)有兩個(gè)重大差別:
  ( 1 )類(lèi)似 errno 的全局變量,每個(gè)線程單獨(dú)設(shè)置一個(gè)。這樣從每個(gè)線程中可以獲取正確的錯(cuò)誤信息。
  ( 2 )多線程庫(kù)中的數(shù)據(jù)結(jié)構(gòu)以同步機(jī)制加以保護(hù)。這樣可以避免訪問(wèn)時(shí)候的沖突。

   Visual C++ 提供的多線程運(yùn)行時(shí)庫(kù)又分為靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)兩類(lèi),而每一類(lèi)運(yùn)行時(shí)庫(kù)又可再分為 debug 版和 release 版,因此 Visual C++ 共提供了 6 個(gè)運(yùn)行時(shí)庫(kù)。如下表:

C 運(yùn)行時(shí)庫(kù)

庫(kù)文件

Single thread(static link) ML

libc.lib

Debug single thread(static link) MLd

libcd.lib

MultiThread(static link) ?MT

libcmt.lib

Debug multiThread(static link) MTd

libcmtd.lib

MultiThread(dynamic link) MD

msvert.lib

Debug multiThread(dynamic link) MDd

msvertd.lib


   2.C 運(yùn)行時(shí)庫(kù)的作用
   C 運(yùn)行時(shí)庫(kù)除了給我們提供必要的庫(kù)函數(shù)調(diào)用(如 memcpy printf malloc 等)之外,它提供的另一個(gè)最重要的功能是為應(yīng)用程序添加啟動(dòng)函數(shù)。
   C 運(yùn)行時(shí)庫(kù)啟動(dòng)函數(shù)的主要功能為進(jìn)行程序的初始化,對(duì)全局變量進(jìn)行賦初值,加載用戶(hù)程序的入口函數(shù)。
  不采用寬字符集的控制臺(tái)程序的入口點(diǎn)為 mainCRTStartup(void) 。下面我們以該函數(shù)為例來(lái)分析運(yùn)行時(shí)庫(kù)究竟為我們添加了怎樣的入口程序。這個(gè)函數(shù)在 crt0.c 中被定義,下列的代碼經(jīng)過(guò)了筆者的整理和簡(jiǎn)化:

void mainCRTStartup(void)
{
  int mainret;
  /* 獲得 WIN32 完整的版本信息 */
  _osver = GetVersion();
  _winminor = (_osver >> 8) & 0x00FF ;
  _winmajor = _osver & 0x00FF ;
  _winver = (_winmajor << 8) + _winminor;
  _osver = (_osver >> 16) & 0x00FFFF ;

  _ioinit(); /* initialize lowio */

  /* 獲得命令行信息 */
  _acmdln = (char *) GetCommandLineA();

  /* 獲得環(huán)境信息 */
  _aenvptr = (char *) __crtGetEnvironmentStringsA();

  _setargv(); /* 設(shè)置命令行參數(shù) */
  _setenvp(); /* 設(shè)置環(huán)境參數(shù) */

  _cinit(); /* C 數(shù)據(jù)初始化:全局變量初始化,就在這里! */

  __initenv = _environ;
  mainret = main( __argc, __argv, _environ ); /* 調(diào)用 main 函數(shù) */

  exit( mainret );
}

從以上代碼可知,運(yùn)行庫(kù)在調(diào)用用戶(hù)程序的 main WinMain 函數(shù)之前,進(jìn)行了一些初始化工作。初始化完成后,接著才調(diào)用了我們編寫(xiě)的 main WinMain 函數(shù)。只有這樣,我們的 C 語(yǔ)言運(yùn)行時(shí)庫(kù)和應(yīng)用程序才能正常地工作起來(lái)。

  除了 crt0.c 外, C 運(yùn)行時(shí)庫(kù)中還包含 wcrt0.c wincrt0.c wwincrt0.c 三個(gè)文件用來(lái)提供初始化函數(shù)。 wcrt0.c crt0.c 的寬字符集版, wincrt0.c 中包含 windows 應(yīng)用程序的入口函數(shù),而 wwincrt0.c 則是 wincrt0.c 的寬字符集版。

   Visual C++ 的運(yùn)行時(shí)庫(kù)源代碼缺省情況下不被安裝。如果您想查看其源代碼,則需要重裝 Visual C++ ,并在重裝在時(shí)選中安裝運(yùn)行庫(kù)源代碼選項(xiàng)。

3.
各種 C 運(yùn)行時(shí)庫(kù)的區(qū)別

  ( 1 )靜態(tài)鏈接的單線程庫(kù)
  靜態(tài)鏈接的單線程庫(kù)只能用于單線程的應(yīng)用程序 C 運(yùn)行時(shí)庫(kù)的目標(biāo)代碼最終被編譯在應(yīng)用程序的二進(jìn)制文件中。通過(guò) /ML 編譯選項(xiàng)可以設(shè)置 Visual C++ 使用靜態(tài)鏈接的單線程庫(kù)。

  ( 2 )靜態(tài)鏈接的多線程庫(kù)
  靜態(tài)鏈接的多線程庫(kù)的目標(biāo)代碼也最終被編譯在應(yīng)用程序的二進(jìn)制文件中,但是它可以在多線程程序中使用。通過(guò) /MT 編譯選項(xiàng)可以設(shè)置 Visual C++ 使用靜態(tài)鏈接的單線程庫(kù)。

  ( 3 )動(dòng)態(tài)鏈接的運(yùn)行時(shí)庫(kù)
  動(dòng)態(tài)鏈接的運(yùn)行時(shí)庫(kù)將所有的 C 庫(kù)函數(shù)保存在一個(gè)單獨(dú)的動(dòng)態(tài)鏈接庫(kù) MSVCRTxx.DLL 中, MSVCRTxx.DLL 處理了多線程問(wèn)題。使用 /MD 編譯選項(xiàng)可以設(shè)置 Visual C++ 使用動(dòng)態(tài)鏈接的運(yùn)行時(shí)庫(kù)。

   /MDd /MLd /MTd 選項(xiàng)使用 Debug runtime library( 調(diào)試版本的運(yùn)行時(shí)刻函數(shù)庫(kù) ) ,與 /MD /ML /MT 分別對(duì)應(yīng)。 Debug 版本的 Runtime Library 包含了調(diào)試信息,并采用了一些保護(hù)機(jī)制以幫助發(fā)現(xiàn)錯(cuò)誤,加強(qiáng)了對(duì)錯(cuò)誤的檢測(cè),因此在運(yùn)行性能方面比不上 Release 版本。

  下面看一個(gè)未正確使用 C 運(yùn)行時(shí)庫(kù)的控制臺(tái)程序

#include <stdio.h>
#include <afx.h>
int main()
{
  CFile file;
  CString str("I love you");
  TRY
  {
   file.Open("file.dat",CFile::modeWrite | CFile::modeCreate);
  }
  CATCH( CFileException, e )
  {
   #ifdef _DEBUG
   afxDump << "File could not be opened " << e->m_cause << "\n";
   #endif
  }
  END_CATCH

  file.Write(str,str.GetLength());
  file.Close();
}

我們?cè)?/span> "rebuild all" 的時(shí)候發(fā)生了 link 錯(cuò)誤:

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
main.exe : fatal error LNK1120: 2 unresolved externals
Error executing cl.exe.

發(fā)生錯(cuò)誤的原因在于 Visual C++ 對(duì)控制臺(tái)程序默認(rèn)使用單線程的靜態(tài)鏈接庫(kù),而 MFC 中的 CFile 類(lèi)已暗藏了多線程。我們只需要在 Visual C++6.0 中依次點(diǎn)選 Project->Settings->C/C++ 菜單和選項(xiàng),在 Project Options 里修改編譯選項(xiàng)即可。

不過(guò)最上面的那個(gè)程序在 6.0里面是可以運(yùn)行的,現(xiàn)象同2003的是一樣的。
***********************************************

?

從字面上看,運(yùn)行庫(kù)是程序在運(yùn)行時(shí)所需要的庫(kù)文件。通常運(yùn)行庫(kù)是以 DLL 形式提供的。 Delphi C++ Builder 的運(yùn)行庫(kù)為 .bpl 文件,實(shí)際還是一個(gè) DLL 。運(yùn)行庫(kù)中一般包括編程時(shí)常用的函數(shù),如字符串操作、文件操作、界面等內(nèi)容。不同的語(yǔ)言所支持的函數(shù)通常是不同的,所以使用的庫(kù)也是完全不同的,這就是為什么有 VB 運(yùn)行庫(kù)、 C 運(yùn)行庫(kù)、 Delphi 運(yùn)行庫(kù)之分的原因。即使都是 C++ 語(yǔ)言,也可能因?yàn)樘峁┑暮瘮?shù)不同,而使用不同的庫(kù)。如 VC++ 使用的運(yùn)行庫(kù)和 C++ Builder 就完全不同。

如果不使用運(yùn)行庫(kù),每個(gè)程序中都會(huì)包括很多重復(fù)的代碼,而使用運(yùn)行庫(kù),可以大大縮小編譯后的程序的大小。但另一方面,由于使用了運(yùn)行庫(kù),所以在分發(fā)程序時(shí)就必須帶有這些庫(kù),比較麻煩。如果在操作系統(tǒng)中找不到相應(yīng)的運(yùn)行庫(kù)程序就無(wú)法運(yùn)行。為了解決這個(gè)矛盾, Windows 總是會(huì)帶上它自己開(kāi)發(fā)的軟件的最新的運(yùn)行庫(kù)。象 Windows 2000 以后的版本都包括 Visual Basic 5.0/6.0 的庫(kù)。 Internet Explorer 總是帶有最新的 Visual C++ 6.0 的庫(kù)。 Windows XP 帶有 Microsoft .NET 1.0 (用于 VB.NET C# )的庫(kù)。 Visual C++ Delphi C++ Builder 允許用戶(hù)選擇所編譯得到的程序是否依賴(lài)于運(yùn)行庫(kù)。而 VB FoxPro PowerBuilder LabWindows/CVI Matlab 就不允許用戶(hù)進(jìn)行這種選擇,必須依賴(lài)于運(yùn)行庫(kù)。

?

小結(jié)

看了上面這么多咚咚以后(我估計(jì)沒(méi)幾個(gè)人會(huì)有這個(gè)耐心把這么多東西看完的,娃哈哈),不過(guò)我還是把它完整地看完了,中間那一段是抄的,講得很好,講得非常清楚。嗯。有一點(diǎn)是可以肯定的,那就是不要用 ML 單線程版本,況且 2005 已經(jīng)不支持 ML (注意,這里 ML 不是 Make L*ve 的縮寫(xiě),汗!)了。另外, ML 不支持多線程的,所以如果使用 ML 來(lái)編譯運(yùn)行的話,肯定會(huì)出很多問(wèn)題的,雖然它沒(méi)有明確說(shuō)出會(huì)發(fā)生什么樣的問(wèn)題。

一個(gè)困擾偶很長(zhǎng)時(shí)間的問(wèn)題終于解決。把 MLd 改為 MDd 所有問(wèn)題就都解決了,用 Intel Thread Checker check 了一下也沒(méi)問(wèn)題。如果大家有碰到同樣的問(wèn)題的話,希望以上能夠給你一點(diǎn)有用的信息。有啥問(wèn)題,歡迎與我聯(lián)系。有啥說(shuō)的不對(duì)的,請(qǐng)批評(píng)指正。恩。

Have fun.

Feedback

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2007-03-27 21:36 by 小熊
晚上傳了n多次圖片,都沒(méi)有成功,哭
CSDN一次就pass了。sigh

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2007-03-28 12:52 by 小熊
線程函數(shù)結(jié)束,線程就結(jié)束

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題 [未登錄](méi)  回復(fù)  更多評(píng)論   

2007-03-30 09:27 by hdqqq
hThread[i] = CreateThread(NULL, 0, helloFunc, (LPVOID)i, 0, NULL);
上面這句是有問(wèn)題的,因?yàn)镃reateThread返回時(shí)候,并不保證線程已經(jīng)啟動(dòng)了,所以進(jìn)入下一個(gè)循環(huán)后i就被修改,導(dǎo)致線程取得了錯(cuò)誤的參數(shù).

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2007-03-30 09:34 by 小熊
但是一個(gè)線程函數(shù)不可能被執(zhí)行多次的。呵呵

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2007-03-30 13:31 by think
這樣寫(xiě)倒是吃驚:(LPVOID)i
你的程序在我機(jī)子上沒(méi)有問(wèn)題,也從來(lái)不遇到過(guò)

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2007-03-30 17:16 by 小熊
(LPVOID)i是沒(méi)問(wèn)題的
你可以把i理解為是一個(gè)指針之類(lèi)的。。。

在你的機(jī)子上沒(méi)問(wèn)題的原因很可能是,你的運(yùn)行時(shí)庫(kù)設(shè)置為MD或者M(jìn)T了,那肯定沒(méi)問(wèn)題。如果你設(shè)置為ML的話,肯定會(huì)有問(wèn)題的,呵呵,或者說(shuō)多運(yùn)行幾次。

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題 [未登錄](méi)  回復(fù)  更多評(píng)論   

2007-04-05 09:16 by christanxw
本質(zhì)原因是你在線程中使用了printf()這樣的非多線程安全的函數(shù)。你用它的多線程版本(/MTd或/MDd)就沒(méi)問(wèn)題了,或者你在使用/MLd時(shí)對(duì)printf加鎖也不會(huì)出問(wèn)題。

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2007-04-05 21:44 by 小熊
恩。不過(guò)printf()也不可能讓一個(gè)線程函數(shù)執(zhí)行多次的吧?
使用了多線程版本后,printf()確實(shí)是不會(huì)有問(wèn)題了。恩

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2008-10-09 17:11 by 5871
很不明白,.....

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題   回復(fù)  更多評(píng)論   

2009-01-20 17:49 by sak
你這個(gè)人很有意思,哇哈哈
咚咚嗆cei cei 嗆

# re: 多線程學(xué)習(xí)中碰到的一個(gè)很有意思的問(wèn)題 [未登錄](méi)  回復(fù)  更多評(píng)論   

2010-04-13 20:07 by Leon
這兩天我也在做操作系統(tǒng)里多線程的實(shí)驗(yàn),這方面的程序確實(shí)錯(cuò)得讓人匪夷所思,我那還有一個(gè)關(guān)于多線程的實(shí)驗(yàn),還有相關(guān)的錯(cuò)誤總結(jié),你如果想看的話愿意和你分享!
QQ:250575616
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品美女在线观看| 亚洲第一黄色| 亚洲精品视频在线| 亚洲国产精品电影| 亚洲国产成人久久综合一区| 91久久精品国产| 亚洲精品午夜| 亚洲欧美电影院| 久久精品国产欧美激情| 久久精品夜色噜噜亚洲aⅴ| 久久综合久久美利坚合众国| 免费在线成人av| 国产精品啊v在线| 韩国v欧美v日本v亚洲v| 亚洲看片一区| 欧美专区18| 最新国产の精品合集bt伙计| 亚洲婷婷免费| 久久综合狠狠| 国产精品久久久久aaaa樱花| 国产在线一区二区三区四区| 亚洲精品一二三| 久久精品一区二区三区不卡| 欧美国产亚洲精品久久久8v| 一本色道久久88综合日韩精品| 欧美在线国产| 国产精品xxx在线观看www| 精品88久久久久88久久久| 一本色道久久99精品综合 | 久久天堂av综合合色| 欧美成人亚洲成人| 国产精品丝袜白浆摸在线| 亚洲国产欧美日韩精品| 午夜国产欧美理论在线播放| 欧美成人一区二区三区片免费| 一区二区三区福利| 欧美成人免费全部| 国语自产在线不卡| 午夜在线播放视频欧美| 亚洲激情一区二区| 麻豆久久精品| 黄色资源网久久资源365| 亚洲欧美日韩一区| 亚洲免费久久| 欧美福利精品| 亚洲欧洲精品一区二区三区不卡 | 99在线|亚洲一区二区| 久久久久在线| 亚洲欧美日韩中文播放| 欧美日韩精品一二三区| 亚洲国产欧美一区二区三区久久| 欧美一级视频| av不卡在线看| 欧美日韩视频在线观看一区二区三区| 亚洲高清av在线| 美女福利精品视频| 久久精品一二三区| 精品成人久久| 免费中文日韩| 美女啪啪无遮挡免费久久网站| 国内精品久久久| 久久女同互慰一区二区三区| 欧美一区亚洲| 在线观看欧美一区| 欧美成人综合一区| 欧美jizz19性欧美| 99热免费精品在线观看| 亚洲茄子视频| 欧美午夜免费影院| 欧美一区二区日韩一区二区| 亚洲在线观看免费视频| 国产欧美欧美| 理论片一区二区在线| 久久人人爽爽爽人久久久| 在线免费观看视频一区| 农村妇女精品| 欧美日韩三级| 欧美在线一级va免费观看| 欧美一区日韩一区| 亚洲国产精品悠悠久久琪琪| 亚洲国产综合视频在线观看| 欧美日韩在线三级| 久久精品视频在线看| 老色鬼精品视频在线观看播放| 亚洲人成77777在线观看网| 一本色道久久综合精品竹菊| 国产美女精品在线| 欧美大片一区二区| 欧美视频中文字幕在线| 久久精品免费播放| 欧美激情一区二区三级高清视频| 亚洲午夜国产成人av电影男同| 性欧美暴力猛交69hd| 亚洲欧洲偷拍精品| 亚洲免费婷婷| 亚洲精品国产拍免费91在线| 在线视频亚洲欧美| 激情婷婷久久| 亚洲最新视频在线| 一区二区三区无毛| 一本一本a久久| 在线看日韩欧美| 亚洲一区二区三区777| 欧美激情按摩| 欧美在线三区| 欧美日韩亚洲一区二区三区| 久久久国产精彩视频美女艺术照福利| 欧美肥婆在线| 久久免费视频网| 国产精品久久久久久久app| 欧美bbbxxxxx| 国产午夜精品麻豆| 夜夜爽www精品| 亚洲精品少妇网址| 久久精品视频免费| 久久不射中文字幕| 国产精品成人观看视频免费| 欧美高清在线一区二区| 国产女精品视频网站免费| 亚洲美女视频网| 亚洲精品一区二| 蜜桃av一区二区| 麻豆成人在线| 好吊色欧美一区二区三区四区| 亚洲网站在线| 亚洲专区在线| 国产精品国产精品| 99国产麻豆精品| 一区二区三区久久久| 欧美成人一区二区三区片免费| 乱码第一页成人| 黑丝一区二区| 久久久久国产精品一区三寸| 久久久久**毛片大全| 国产亚洲亚洲| 欧美一区二区日韩一区二区| 亚洲图片欧美日产| 欧美日韩国产二区| 欧美电影免费观看高清| 亚洲高清资源| 欧美国产一区视频在线观看| 欧美高清视频免费观看| **性色生活片久久毛片| 久久久精品999| 欧美国产精品人人做人人爱| 在线免费观看视频一区| 蜜桃久久精品乱码一区二区| 欧美国产另类| 亚洲黄页视频免费观看| 欧美国产精品中文字幕| 亚洲精品一区二区三区99| 亚洲无玛一区| 国产日韩欧美中文| 欧美在线一级va免费观看| 久久久综合精品| 亚洲精选在线| 国产精品a久久久久| 香蕉乱码成人久久天堂爱免费 | 亚洲欧洲精品一区| 欧美日韩成人在线播放| 亚洲视频日本| 久久综合网色—综合色88| 亚洲电影免费观看高清完整版在线 | 欧美在线视频网站| 在线观看精品视频| 欧美精品成人一区二区在线观看 | 欧美成人激情视频免费观看| 99视频精品免费观看| 久久av一区二区三区| 欧美aaaaaaaa牛牛影院| 亚洲免费电影在线观看| 久久aⅴ国产紧身牛仔裤| 精东粉嫩av免费一区二区三区| 欧美成人免费在线视频| 在线亚洲一区二区| 欧美a级理论片| 欧美一级视频精品观看| 91久久综合亚洲鲁鲁五月天| 国产精品乱码久久久久久| 久久蜜桃香蕉精品一区二区三区| 亚洲精品综合在线| 久久综合免费视频影院| 亚洲一区二区在线| 亚洲国产一区在线| 国产日本精品| 欧美精品午夜视频| 久久久99免费视频| 一区二区三区日韩精品| 亚洲成在线观看| 久久久久一区二区| 香蕉av777xxx色综合一区| 亚洲欧洲美洲综合色网| 一区二区三区在线高清| 国产精品女主播在线观看| 欧美久久久久久久久久| 久久免费视频网站| 欧美在线|欧美| 中文日韩在线| 亚洲精品一区二区三区在线观看 | 亚洲视频网在线直播|