精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

原子操作 vs 非原子操作

開發
在網上已經有很多有關介紹原子操作的內容,通常都是注重于原子讀-修改-寫(RMW)操作。然而,這些并不是原子操作的全部,還有同樣重要的原子加 載和原子存儲。在這篇文章中,我將要在處理器級別和C/C++語言級別兩個方面來對比原子加載和原子存儲與它們相應的非原子部分。沿著這條路,我們將弄清 楚C++11中“數據競爭”這個概念。

在網上已經有很多有關介紹原子操作的內容,通常都是注重于原子讀-修改-寫(RMW)操作。然而,這些并不是原子操作的全部,還有同樣重要的原子加 載和原子存儲。在這篇文章中,我將要在處理器級別和C/C++語言級別兩個方面來對比原子加載和原子存儲與它們相應的非原子部分。沿著這條路,我們將弄清 楚C++11中“數據競爭”這個概念。

1

共享內存中的原子操作是指它是否完成了一個線程相關的單步操作。當一個原子存儲作用于一個共享變量時,其他的線程不能監測到這個未完成的修改值。當 一個原子加載作用于一個共享變量時,它讀取到這個完整的值,就像此時出現了一個單獨的時刻,而非原子加載和存儲則不能做到這些保證。

如果沒有這些保證,無鎖編程將不可能實現,因為你不能使不同的線程同時操作一個共享變量。我們可以制定如下規則:

任何時刻兩個線程同時操作一個共享變量,當其中一個為寫操作時,這兩個線程必須使用原子操作。

如果你違反這條規則,并且每個線程都使用非原子操作,你將會看到C++11標準中提到的數據競爭(不要混淆于Java中數據競爭的概念,這個是不同的,或者說是更廣義上的競爭情況)。C++11標準并沒有告訴你為什么數據競爭是糟糕的,但只要你出現這種情況,就會發生“未定義行為”(1.10.21部分)。這種糟糕的數據競爭的原因是非常簡單的:它們導致了讀寫撕裂。

一個內存操作可以是非原子的,因為它使用非原子的多CPU指令,即使當使用單CPU指令時也是非原子的,因為你不能簡單的設想你寫出的可移植代碼。讓我們來看幾個例子。

非原子性是由于多CPU指令

假設你有一個64位初始化為0的全局變量。

  1. uint64_t sharedValue = 0

在某些時刻,你給這個變量賦一個64位的值。

  1. void storeValue() 
  2.      sharedValue = 0x100000002

當你在32位的x86環境下使用GCC來編譯這個函數時,將會生成如下機器碼。

  1. $ gcc -O2 -S -masm=intel test.c 
  2. $ cat test.s 
  3.       ... 
  4.       mov DWORD PTR sharedValue, 2 
  5.       mov DWORD PTR sharedValue+4, 1 
  6.       ret 
  7.       ... 

這個時候你就會看到,編譯器會使用兩個單獨的機器指令來完成這個64位的賦值。第一條指令設置低32位的0×00000002,第二條指令設置高32位的0×00000001.非常明顯,這個賦值操作是非原子的。如果共享變量同時被不同的線程存取,就會出現很多錯誤:

  • 如果一個線程在兩個機器指令的間隙先調用存儲變量,將會在內存中留下像0×0000000000000002這樣的值——這是一個寫撕裂。在這個時候,如果另一個線程讀取共享變量,它將會接收到一個完全偽造的、沒有人想要存儲的值。
  • 更糟糕的是,如果一個線程在兩個機器指令的間隙先占用變量,而另一個線程在第一個線程重新獲得這個變量之前修改了sharedValue,那將導致一個永久性的寫撕裂:一個線程得到高32位,另一個線程得到低32位。
  • 在多核設備上,并不是只有先行占有其中一個線程來導致一個寫撕裂。當一個線程調用storeValue時,任何線程在另一個核上可能同時讀取一個明顯未修改完的sharedValue。

同時讀取sharedValue會帶給它一系列的問題:

  1. uint64_t loadValue() 
  2.       return sharedValue; 
  3.   
  4. $ gcc -O2 -S -masm=intel test.c 
  5. $ cat test.s 
  6.       ... 
  7.       mov eax, DWORD PTR sharedValue 
  8.       mov edx, DWORD PTR sharedValue+4 
  9.       ret 
  10.       ... 

這里也一樣,編譯器會使用兩條機器指令來執行這個加載操作:第一條讀取低32位到eax,第二條讀取高32位到edx。在這種情況下,如果對于sharedValue進行同時存儲則會發現,它將導致一個讀撕裂——即使這個同時存儲是原子的。

這個問題并不是理論上的,Mintomic的 測試集包含了一個名為test_load_store_64_fail的測試案例,在這個案例中,一個線程使用一個普通的賦值操作,存儲了很多64位的值 到一個單獨的變量,同時另一個線程對這個變量反復地執行一個簡單的加載,來確認每一個結果。在一個多核的x86機器上,這個測試像我們想象的一樣一直失 敗。

2

#p# 

非原子的CPU指令

一個內存操作可以是非原子的,甚至是當由一個單CPU指令來執行的時候。例如,ARMv7指令設置包含了將兩個由32位源寄存器的內容存儲到內存中的一個64位值的strd指令。

  1. strd r0, r1, [r2] 

在一些ARMv7處理器中,這條指令是非原子的。當這個處理器遇到這條指令時,它實際上在底層執行兩個單獨的32位存儲(A3.5.3部分)。再來 一次,另一個線程在一個單獨的核上運行,有可能觀察到一個寫撕裂。有趣的是,寫撕裂更可能出現在一個單核的設備上:例如,一個預定線程的上下文切換的系統 中斷,確實可以執行在兩個內部的32位存儲之間!在這種情況下,當這個線程從這個中斷恢復時,它將再一次重新調用這個strd指令。

再看另一個例子,眾所周知,在x86環境下,如果內存操作數是自然對齊的,那么一個32位的mov指令就是原子的,但如果不是自然對齊,那么將是非 原子的。換句話說,原子性的保證僅僅是當一個32位整數的地址正好是4的倍數的時候。Mintomic提出另一個證實這個保證的測試案 例,test_load_store_32_fail。就像寫的那樣,這個測試在x86總是成功的,但是如果你修改這個測試,強制將sharedInt置 于一個未對齊的地址,它將失敗。在我的Core 2 Quad Q6600上,這個測試失敗了,因為sharedInt在一個寄存器中越界了。

  1. // Force sharedInt to cross a cache line boundary: 
  2. #pragma pack(2) 
  3. MINT_DECL_ALIGNED(static struct, 64) 
  4.       char padding[62]; 
  5.       mint_atomic32_t sharedInt; 
  6. g_wrapper; 

3

現在已經有很多特定于處理器的細節,讓我們再來看看C/C++語言級別的原子性。

所有的C/C++操作被認定為非原子的

在C和C++中,所有操作被認定是非原子的,甚至是普通的32位整數賦值,除非被別的編譯器或者硬件供應商指定。

  1. uint32_t foo = 0
  2.   
  3. void storeFoo() 
  4.       foo = 0x80286

這個語言標準并沒有提到任何有關于這種情況下的原子性。也許整型賦值是原子的,也許不是。因為非原子操作沒有做任何保證,在C定義中,普通整型賦值是非原子的。

實際上,我們對我們的目標平臺了解的更多。例如,大家都知道在現在的x86、x64、Itanium、SPARC、ARM和PowerPC處理機 上,只要目標變量是自然對齊的,那么普通32位整型賦值就是原子的,你可以通過查詢你的處理機手冊或者編譯器文檔來證實。在游戲行業,我可以告訴你很多關 于32位整型賦值依賴這個特殊保證的例子。

盡管如此,但在寫真正的可移植的C和C++代碼時,有一個歷史悠久的傳統,就是我們所知道的僅僅是語言標準告訴我們的。可移植的C和C++代碼的設 計是為了可以運行在任何可能的計算設備上,過去的、現在的以及虛擬的。就我自己而言,我想設計一種機器,它的內存僅僅可以通過先到先得來改變:

4

在這樣的機器上,你絕對不會想要在執行一個并發的讀操作的同時執行一個普通的賦值,你可以結束讀取一個完整的隨機值。

在C++11中,有一個最終的方案來執行實際的可移植原子加載和存儲——C++11原子庫。通過使用C++11原子庫來執行原子加載和存儲,甚至可以運行在虛擬的計算機上,即使這意味著C++11原子庫必須默默地加一個互斥量來確保每一個操作都是原子的。這里還有我上個月發布的Mintomic庫,它并不支持這么多平臺,但是可以運行在很多以前的編譯器上,它是優化過的,并且保證是無鎖的。

寬松的原子操作

讓我們回到前面那個sharedValue例子最開始的地方,我們將用Mintomic重寫它,這樣所有的操作就可以原子地執行在任何Mintomic支持的平臺上了。首先,我們必須聲明sharedValue為Mintomic原子數據類型中的一個。

  1. #include <mintomic/mintomic.h> 
  2. mint_atomic64_t sharedValue = { 0 }; 

mint_atomic64_t類型保證了在所有平臺上原子存取的正確內存對齊。這是非常重要的,因為,例如ARM的GCC4.2編譯器附帶的Xcode3.2.5并不保證普通的uint64_t以8字節對齊。

對于storeValue,通過執行一個普通的、非原子的賦值來替代,我們必須調用mint_store_64_relaxed。

  1. void storeValue() 
  2.      mint_store_64_relaxed(&sharedValue, 0x100000002); 

相似的,在loadValue中,我們調用mint_load_64_relaxed。

  1. uint64_t loadValue() 
  2.       return mint_load_64_relaxed(&sharedValue); 

使用C++11的術語,這些函數現在不存在數據競爭。當并發操作執行時,無論代碼運行在ARMv6/ARMv7 (Thumb或者ARM模式)、x86、x64 或者PowerPC上,絕對不可能出現讀寫撕裂。你是否好奇mint_load_64_relaxed和mint_store_64_relaxed是如 何工作的,這兩個函數在x86上都是擴展到一個內聯的cmpxchg8b指令上,對于其他平臺,請查詢Mintomic的實現

在C++11中明確的寫出了類似的代碼:

  1. #include <atomic> 
  2.   
  3. std::atomic<uint64_t> sharedValue(0); 
  4.   
  5. void storeValue() 
  6.      sharedValue.store(0x100000002, std::memory_order_relaxed); 
  7.   
  8. uint64_t loadValue() 
  9.      return sharedValue.load(std::memory_order_relaxed); 

你會注意到,在Mintomic和C++11的例子中都使用了寬松的原子性,由_relaxed后綴的多個標識符來證明。_relaxed后綴暗示了,就像普通的加載和存儲一樣,沒有內存訪問排序的保證。

一個寬松的原子加載(或存儲)和一個非原子加載(或存儲)之間的唯一區別就是,寬松的原子操作保證了原子性,沒有其他區別來保證。

特別的,在程序指令中,一個寬松的原子操作,被它前面或者后面的指令由于處理機本身任何一個因為編譯器重新排序或者內存重新排序所產生的影響,對內存來說依然是合法的。編譯器甚至可以在冗余的寬松原子操作上執行優化,就像非原子操作一樣。就一切情況而言,這些操作仍然是原子的。

當并發操作同時共享內存時,我認為,一直使用Mintomic或者C++11原子庫函數是非常好的練習,甚至當你知道在你的目標平臺上,一個普通的加載或者存儲已經是原子的情況下。一個原子庫函數就像提示這個變量是并發數據存儲的目標。

我希望,現在大家可以更清楚的知道,為什么《世界上最簡單的無鎖哈希表》使用Mintomic庫函數來并發地操作不同線程的共享內存。

原文鏈接:http://preshing.com/20130618/atomic-vs-non-atomic-operations/

譯文鏈接:http://blog.jobbole.com/54345/

責任編輯:陳四芳 來源: 伯樂在線
相關推薦

2020-11-27 06:44:22

原子加鎖x86

2021-04-01 17:36:30

鴻蒙HarmonyOS應用開發

2021-06-29 10:07:24

Javalong原子操作

2023-06-27 08:45:19

原子操作Golang

2023-09-19 23:26:15

++i原子操作C++

2012-05-23 12:49:58

Java自增操作原子性

2023-07-13 08:26:49

Java羅漢增強類

2021-09-22 12:56:19

編程技能Golang

2022-08-21 17:35:31

原子多線程

2022-09-09 15:32:46

intC語言原子操作

2020-05-22 10:35:07

CPU線程操作系統

2022-07-01 11:07:56

int原子操作代碼

2021-06-03 14:00:35

PolarDB

2021-06-02 16:30:33

PolarDB原子性數據庫

2023-01-05 12:30:32

Redis

2023-11-07 08:04:19

Go并發程序原子操作

2013-12-18 10:27:11

OpenMP線程

2025-11-18 01:00:00

2020-10-19 06:43:53

Redis腳本原子

2013-08-09 09:27:31

點贊
收藏

51CTO技術棧公眾號

成人av网址在线| 97视频精品| 欧美午夜无遮挡| 日韩一区国产在线观看| 国产后入清纯学生妹| 狠狠爱综合网| 一区二区亚洲欧洲国产日韩| 色男人天堂av| 亚洲欧洲美洲av| 亚洲欧洲国产日本综合| 国产精品一 二 三| 中文字幕福利视频| 亚洲东热激情| 日韩视频免费在线| 三级视频网站在线观看| 狂野欧美性猛交xxxx| 亚洲亚洲人成综合网络| 日韩av不卡播放| 国产成人手机在线| 蜜桃视频在线观看一区| 97av视频在线| 欧美日韩午夜视频| 精品美女久久| 亚洲精品国精品久久99热| 激情五月婷婷基地| 暖暖成人免费视频| 亚洲国产精品人人做人人爽| 亚洲综合第一| 国产在线91| www.欧美亚洲| 豆国产97在线| 国产伦一区二区| 人人精品人人爱| 97视频在线播放| 国产亚洲第一页| 久久中文字幕av| 亚洲欧美中文字幕在线一区| 第一页在线视频| 爱情电影网av一区二区| 欧洲一区二区三区在线| 欧美极品欧美精品欧美图片| 国产色婷婷在线| 亚洲免费三区一区二区| 亚洲欧洲精品在线观看| 国产午夜在线观看| 久久久久国色av免费看影院| 精品日本一区二区三区在线观看| 精品人妻少妇AV无码专区| 久久av中文字幕片| 国产欧美一区二区| 91丨九色丨蝌蚪丨对白| 日本午夜一区二区| 日韩免费不卡av| www.国产毛片| 日产国产欧美视频一区精品| 青青a在线精品免费观看| 超碰在线国产97| 永久91嫩草亚洲精品人人| 久久久av免费| 波多野结衣亚洲一区二区| 亚洲欧美综合久久久| 日韩一区二区三区xxxx| 午夜三级在线观看| 五月天久久久| 欧美插天视频在线播放| 中文字幕另类日韩欧美亚洲嫩草| 午夜视频精品| 久久久久久久久久国产| www..com国产| 久久久久久婷| 国产日韩欧美成人| 午夜精品久久久久久久99老熟妇| 东方欧美亚洲色图在线| 国产亚洲一区在线播放| 天堂资源中文在线| 久久久久久久av麻豆果冻| 日韩在线电影一区| 国产一二区在线| 亚洲伊人伊色伊影伊综合网| 成年人午夜视频在线观看| 欧美大片免费高清观看| 欧美日韩亚洲高清一区二区| 久久人人爽人人片| 国产精品高潮呻吟久久久久| 日韩高清a**址| 亚洲av无码国产精品麻豆天美| 成人情趣视频网站| 欧美成人午夜免费视在线看片 | 日本www在线视频| 日韩精品99| 欧美乱熟臀69xxxxxx| 国产探花一区二区三区| 老汉色老汉首页av亚洲| 一本一道久久a久久精品逆3p | 色欲欲www成人网站| 精品无人区一区二区| 国产亚洲精品久久久| 四虎永久免费在线| 欧美亚洲三区| 亚洲一区二区三区成人在线视频精品| 色哟哟国产精品色哟哟| 中文字幕不卡在线观看| 三上悠亚久久精品| a一区二区三区亚洲| 亚洲欧美一区二区三区情侣bbw| 老司机成人免费视频| 翔田千里一区二区| 99国产超薄肉色丝袜交足的后果| 国产一级片在线播放| 一区二区成人在线| 一本久道中文无码字幕av| 91综合精品国产丝袜长腿久久| 亚洲欧美国产一本综合首页| 欧美日韩一级在线观看| 日本欧美一区二区| 久久99精品国产99久久| 国产不卡在线| 欧美少妇一区二区| 一级欧美一级日韩片| 亚洲欧美一级二级三级| 国产精品久久久久久久久久久新郎| 亚洲欧美另类日韩| 亚洲免费伊人电影| 污污的视频免费| 蜜桃视频欧美| 97超碰国产精品女人人人爽| 亚洲第一天堂网| 日韩毛片精品高清免费| 牛夜精品久久久久久久| 蜜桃tv一区二区三区| 性色av一区二区三区免费| 精品国产av 无码一区二区三区 | 日韩一级片大全| 奇米四色…亚洲| 欧美日韩精品免费观看 | 国产欧亚日韩视频| 国产在线超碰| 日本乱人伦aⅴ精品| 国产ts丝袜人妖系列视频| 在线播放不卡| 国产精品夜夜夜一区二区三区尤| 18视频在线观看| 欧美一区二区三区小说| 极品美妇后花庭翘臀娇吟小说| 奇米一区二区三区av| 日韩高清国产精品| 精品国产欧美日韩一区二区三区| 国产亚洲xxx| 久久人人爽人人爽人人片av免费| 久久久久久一二三区| 狠狠爱免费视频| 九九久久精品| 国产精品va在线播放| 国产在线观看高清视频| 91成人国产精品| 久久久精品成人| 美洲天堂一区二卡三卡四卡视频| 日韩不卡av| 婷婷久久综合九色综合99蜜桃| 日韩亚洲一区二区| h狠狠躁死你h高h| 亚洲国产精品久久久久秋霞影院 | 18禁免费观看网站| 校花撩起jk露出白色内裤国产精品| 4k岛国日韩精品**专区| 美女欧美视频在线观看免费 | 亚洲欧美日韩国产成人精品影院 | 久久伊人影院| 欧美激情手机在线视频| 天天躁日日躁狠狠躁伊人| 欧美视频第一页| 国产精品成人无码免费| 国产主播一区二区| 免费拍拍拍网站| 女厕嘘嘘一区二区在线播放 | 波多野结衣在线观看视频| 欧美国产在线观看| 伊人国产精品视频| 亚洲激情网站| 天堂资源在线亚洲视频| 国产午夜精品一区在线观看| 国模精品视频一区二区三区| 黄色av网址在线免费观看| 欧美狂野另类xxxxoooo| 久久精品国产亚洲av无码娇色 | 东方伊人免费在线观看| 国模娜娜一区二区三区| 男人插女人视频在线观看| 国产剧情在线观看一区| 91精品视频在线| 免费在线小视频| 在线电影欧美日韩一区二区私密| 国产夫妻性生活视频| 精品免费在线观看| 99精品欧美一区二区| 国产高清亚洲一区| 无遮挡又爽又刺激的视频| 伊人久久大香线蕉综合四虎小说 | 国产精品久久综合av爱欲tv| 天堂成人av| 亚洲色图狂野欧美| 韩国av免费在线| 欧美日韩国产经典色站一区二区三区| 久久婷婷国产麻豆91| 日本一区二区视频在线观看| 人妻互换一二三区激情视频| 日本不卡中文字幕| 欧美三级在线观看视频| 亚洲精品午夜av福利久久蜜桃| 精品乱色一区二区中文字幕| 国产精品中文| 国产精品亚洲欧美导航| 18video性欧美19sex高清| 日韩亚洲欧美中文在线| 黄色片在线免费看| 日韩av一区二区在线| av网站在线免费看| 欧美三级蜜桃2在线观看| 久久久久久久久久久久国产| 国产精品拍天天在线| 9.1成人看片| 国产成人免费在线观看| 在线黄色免费看| 老司机午夜免费精品视频| 国产高清av在线播放| 欧美激情日韩| 国产91av视频在线观看| 欧美最新另类人妖| 欧美极品一区| 欧美五码在线| 国产精品手机视频| 中文字幕视频精品一区二区三区| 成人国产亚洲精品a区天堂华泰| 在线观看精品| 欧洲亚洲在线视频| 精精国产xxxx视频在线中文版| 久久精品一偷一偷国产| 中文日本在线观看| 中文字幕成人在线| h视频在线免费| 在线国产精品视频| 国产免费永久在线观看| 亚洲欧美日韩成人| 你懂的视频在线观看| 亚洲人成电影网站| 黄色影院在线播放| 亚洲三级 欧美三级| 男人的天堂在线| 亚洲欧美日韩综合| 成人性生交大片免费看午夜| 精品呦交小u女在线| 欧美女子与性| 亚洲视频在线免费观看| 国产高清免费在线播放| 国产一区二区日韩| av在线播放网站| 最近中文字幕2019免费| 暖暖日本在线观看| 欧美精品亚州精品| av电影在线地址| 国产91成人在在线播放| 最新日韩三级| 国产欧美久久久久久| 精品91福利视频| 肥熟一91porny丨九色丨| 欧洲在线一区| 欧美久久久久久一卡四| 成人影院天天5g天天爽无毒影院| 水蜜桃亚洲精品| 综合av在线| 国产午夜大地久久| 日韩黄色免费电影| 天美一区二区三区| 国产a精品视频| mm131美女视频| 国产精品福利影院| 激情视频在线播放| 欧美性少妇18aaaa视频| 中文字幕 自拍偷拍| 欧美一区二区福利在线| 天堂网av2014| 少妇高潮久久77777| 性欧美ⅴideo另类hd| 欧美中文在线观看国产| 久久女人天堂| 国产精品免费一区二区三区| 国产精品嫩模av在线| 久久免费视频2| 国产视频一区三区| 中文字幕亚洲欧洲| 99riav一区二区三区| 97精品在线播放| 午夜视频在线观看一区二区| 波多野结衣一区二区三区在线| 欧美一区二区三级| 你懂的在线免费观看| 久久99亚洲热视| 三级成人在线| 国产成人亚洲欧美| 久久久五月天| 日本三区在线观看| 国产成人午夜99999| 一级在线观看视频| 亚洲国产精品综合小说图片区| 中文字幕av片| 精品亚洲一区二区| 最新黄网在线观看| 国产精品欧美亚洲777777| 久久超级碰碰| 日本一本草久p| 日韩福利视频导航| 日韩精品视频一区二区| 中文字幕一区二区三区在线播放 | 日韩精品一区二区三区中文不卡 | 男人的天堂最新网址| 99精品国产热久久91蜜凸| 波多野结衣亚洲一区二区| 在线视频欧美区| 手机看片1024国产| 欧美www在线| 日韩美香港a一级毛片| 欧美高清性xxxxhd| 在线欧美不卡| 古装做爰无遮挡三级聊斋艳谭| 国产欧美一区二区精品婷婷| 日韩免费在线视频观看| 日韩欧美一区二区在线视频| 免费黄网站在线播放| 国产精品aaa| 亚洲精品国产动漫| 欧美 日韩 国产在线观看| 国产成人啪午夜精品网站男同| 多男操一女视频| 在线播放91灌醉迷j高跟美女| av在线免费观看网站| 国产精品久久久久久av| 国产精品亚洲片在线播放| 自慰无码一区二区三区| 福利91精品一区二区三区| 少妇被躁爽到高潮无码文| 欧美精品一二三区| 九义人在线观看完整免费版电视剧| 国产精品极品美女在线观看免费| 伊人成综合网伊人222| 日韩av播放器| 国产网站一区二区三区| 黄色污污视频软件| 亚洲最新视频在线| 成人精品一区二区三区电影| 亚洲黄色成人久久久| 麻豆国产精品官网| 亚洲精品国产精品乱码在线观看| 欧美日韩久久久一区| 在线a人片免费观看视频| 国产欧美一区二区| 亚洲欧美一区在线| 一边摸一边做爽的视频17国产| 亚洲成人久久影院| 日韩大胆人体| 国产精品美乳一区二区免费| 97久久夜色精品国产| 成人高清在线观看视频| 亚洲国产成人精品视频| 头脑特工队2免费完整版在线观看| 全球成人中文在线| 97国产成人高清在线观看| 五月天丁香花婷婷| 亚洲精品水蜜桃| 天天摸天天干天天操| 欧美中在线观看| 日韩精品永久网址| 古装做爰无遮挡三级聊斋艳谭| 午夜精品在线看| 国产视频三级在线观看播放| 成人性教育视频在线观看| 国产精品v亚洲精品v日韩精品| 国产黑丝一区二区| 欧美在线色视频| 69xxx在线| 久久伊人一区二区| 久久66热偷产精品| 国产精品23p| 亚洲性69xxxbbb| 日韩精品一区国产| 97视频在线免费播放| 亚洲欧美视频在线观看视频| 视频二区在线观看| 国产精品久久久久久久av大片| 国内精品久久久久久久影视麻豆| 亚洲做受高潮无遮挡| 91精品国产色综合久久不卡电影| h片在线观看下载| 五月天亚洲综合| 成人av电影在线网| 国产理论片在线观看| 欧美一级淫片播放口| 你懂的一区二区| 国产精品国产三级国产专业不 | 一区二区三区日韩精品视频| 污污网站在线免费观看|